To have a functional C++ API for creating custom QQuick3DNode/QtQuick3DObjects we need to expose the scene graph nodes that are returned by updateSpatialNode(...)
The challenge is not exposing too much internal details of the renderer. The GraphObject nodes (they live in runtimerender/graphobjects folder) just store state from the the frontend in structs that are used in the render thread (same pattern as Qt Quick 2D Scenegraph).
These structs should use the same pattern as QSGNode for being made public (adding a d pointer, etc).
Some work is done to only expose a minimum of internal classes of the renderer. Keep state types to simplistic value types like QMatrix, QVector, etc when possible.