You could have a look at the entertree() function. Different then _ready() it will execute as soon as the node enters the tree, thus before the child nodes entered. Maybe this is is useful?
You could also create placeholders as you called them, add them into groups of whatever you need and then as soon as they are needed replace them with real ones like:
var Box = preload("res://Items/Box.tscn")
func _on_area2d_entered(body): #nodes should be 'activated'
for box_placeholder in get_tree().get_nodes_in_group("Boxes"):
var new_box = Box.instance()
# assigning some variables
new_box.position = box_placeholder.position
new_box.name = box_placeholder.name
box_placeholder.queue_free()
# ...
# assigning all the other variables
# ...
remove_child(box_placeholder)
add_child(new_box)
If that's a good solution depends on how many of those nodes would be loaded at once, I guess :)
Also: If you want to stop nodes working that are not on the screen VisibilityEnabler is something you should look at.
Hope I was able to help. If not feel free to ask further questions.