This is a very interesting topic. I'll take a stab at it while making some assumptions. I have a few questions first though:
Do you expect them to inherit from your classes? Is that why you are worried about relativity and linking?
A lot of this is most likely my opinion but it is also based on years of experience and observing how NI does their step types.
First it doesn't matter where your source code resides. That is great that you are using a source code control. Custom Step Types should be completely deployed independent entities. In other words they should exist on their own and within their own folder structure.
NI recommends that custom step types are placed in: <TestStand Public>\Components\Step Types
If I were in your shoes and I was trying to distribute custom step types like like this I would put my classes inside of lvlibs and then create packed project libraries out of them. Then I would divide the Step Types folder up according to my step types. For example if I had a bunch of steps related to DC Power Supply I would create a sub folder in there called DCPS or something like that. Then I would put my PPL in there.
Then I would create a new type palette in the <TestStand Public>\Components\TypePalettes folder. It would contain my step type definitions. So maybe a correlating DCPS.ini file containing the step type definitions for all the PPL inside of the DCPS folder in Step Types.
For distributing them you only need to distribute 2 files at this point: DCPS.ini and DCPS.lvlibp, each going to their respective folders in Components. You can use NIPM to distribute or just a batch file to copy and paste. Or full on installer if needed.
Developers can also distribute them with their distributions if needed.
Hope this helps. Let me know if you have any questions.