Thanks for the reply. Seems like it's depending on the situation but set_process(false) is probably one of the closest I was looking for and didn't know yet. (I was already familiar with hide() and remove_child().) For the sake of optimization I think this is very important feature to have, if one is dealing with a world much bigger than the screen.
About remove_child() though, can I use that to remove a node from the tree and then instance it again using only add_child() pretending like I never destroyed it in the first place? So remove_child() does not remove the node from memory completely? Is there some more radical function to do the memory liberation if needed? Also if I understood correctly, has_node() function also checks whether the node exists (is removed or not). I wonder if I should check the existence of nodes and their instances (id) differently...
I assume, for area based deactivation the best option might be to use a group. A function checks all the nodes set in the group and then I make a function like "inside_area()" (if there's no similar function already) and deactivate/de-process/remove all the grouped nodes outside the area. Ideally I would design my game so that in the main scene I could only remove one big node-branch of relevant game scenes at once, but I doubt that way I only end up creating many nodes purely for organizing other nodes. I don't know if it's bad but maybe the group-option is meant for this kind of situations better... Correct my brainstorm if I'm wrong somewhere. xD