I think to render CAD formats effectively, instancing or batching (e.g. InstancedMesh and BatchedMesh) are strictly necessary. This makes selection and interactivity more complex, but that can be solved.
Personally I would start by either modifying a loader, or re-writing the output of a loader, into one or more BatchedMesh instances. With BatchedMesh you can…
- position/rotate/scale
- raycast
- show/hide
- set color
… for any number of instances of any number of geometries. To do more complex things (like making specific instances transparent) you may need to reallocate some objects in another BatchedMesh instance.