I think what I'm trying to do is build an anonymous object, set its name attribute, and then use the name attribute to call methods on it.
Well, what difference does it make to your program what the thing is called? You can deal with references, since you are creating the objects. I would probably either change the config format or parse it and generate some kind of tree structure. Then you just walk down the tree, adding the child nodes as you go. It might call for a recursive function. I've had good luck with Tree::DAG_Node and its walk_down() method.