I would guess that the reason the labels are not positioned correctly is for two reasons.
The first reason is they do not have their position set when they are created, so you are getting the default position. Godot defaults to a position of (0, 0), so if you want to position the nodes, you'll have to change them after calling add_child (You may be able to move the nodes before add_child, but it has not worked for me)
The reason the positions are updated in _process is because the VBoxContainter node has had time to reposition the labels. The container has to update before it can move its children into position, which means another _process function call (or whatever the container uses to reposition nodes) has to go by so it can reposition its children.
Because you have just created the label and are checking it's position, you are going to get (0, 0) because the container has not had a chance to update and reposition the nodes yet, but the container will in the next _process call, which is why you are getting the correct values in _process.