I've used a variation of this design in the past and as you said if you load it dynamically from disk, LabVIEW needs to be told to always include it in builds. If I provide VIPM package to someone, I don't think it is an obvious step that they should need to find my class and add it to an always include for builds. I don't need to do that for other APIs, like DAQmx for example. If you can rely on the documentation to have the always include, and you control on disk where things are, your dynamic load solution with naming of the class will work.
If I want to avoid always include, and if I want the code to have to be brought as a dependency, I think there are only one of two options for forcing the library to be in memory, so the dependencies are brought along. Either have a class constant somewhere, or a class specific VI. It must be one of those two options right? That was my original question of which design do people prefer and use to force some code to be dependent on that class?