The quick run down is that you have to add your own subclass of UPrimitiveComponent that then add to the scene (e.g. by adding it to a blueprint).
In your primitive component you will have to implement FPrimitiveSceneProxy for your component. That is the class that actually handles interfacing with the renderer and will ultimately provide the triangles to the renderer for shading.
The tricky bit is that the component is updated on the main thread while the scene proxy is used on the rendering thread so you cannot safely read most UObjects from the scene proxy. That requires you to marshal data from the component to the proxy either by recreating the proxy or by using a rendering command to buffer the update to the rendering thread. We don’t have any great examples of this workflow in public code right now which is why this plugin will be so useful. It provides you with the patterns you need to get it all working without introducing race conditions in your code that would manifest as bugs or crashes that only happen occasionally.