There has been a way to “reload” C# plug-ins for a while now, and we’re using this method too, both for RHP and GHA files.
See How To Debug/Recompile Without Restarting Rhino
and New way to load a C# .net plugin
Briefly, it makes a separation of the commands that reside in the plug-ins, and the command implementations that reside in another assembly. This command implementation assembly is reloaded every time the command executes using Assembly.Load(File.ReadAllBytes(<path/to/implemetation-dll>));
This can be done multiple times, and the newly loaded assembly will overwrite or take precedence over the old assembly.