Maybe I'm missing something but I do nothing to drive it more complicated than it has to be. The children are stored into plain array lists, I use nothing fancy. However, note that they are drawn in the reverse order except if you use a delegate.
No there isn't but you just have to implement a single method: void render(Spatial spatial, Renderer renderer). You should only use almost the same code than Node.draw() (except the order in the loop) when the spatial is a node and call Spatial.onDraw() when the spatial isn't a node.