I have thought a bit about this. In my experience with Cocos2d-x I have found that the architecture is very flat. A great deal of features have been added in the last few versions, and those features do not work well with each other, but rather function individually.
I was thinking along these lines…
Since backwards compatibility is important, leave the current node implementations as is. However, in my humble opinion, we really only need one node type. A geometry node, or perhaps just Node with attachments. The current implementation of Node permits components, so perhaps adding a geometry component while leaving the remaining node types untouched would suffice.
I would separate the geometry from the code that loads/creates/modifies geometry and make those components as well. I.e. a Label is just a Node with a geometry component and label component. The geometry part goes to the renderer, and the Label part is what converts the string to vertices/uv’s etc.
Anyway, the idea is to leave the hierarchical version of cocos2d-x intact while building out a component based version alongside. I believe that the cocos codebase requires some serious consolidation to remove all the duplicated code for drawing different node types. Only a single component is needed to represent geometry which is handed to the renderer. All the other nodes can just manipulate a geometry object to achieve the results they want. All engine features such as shadows, lights, etc. would operate at the renderer pipeline level on the geometry which makes implementing features across the board possible.