I’m not sure what is going on, but the way it is supposed to work is that you register the plug-in once with Rhino, and the most easy way is to drag it onto a running instance of Rhino. Then, as you have seen in the registry, the plug-in is known to Rhino.
Each time you add or remove a command, you must exit Rhino, then re-build the plug-in in Visual Studio, then start Rhino again. The new command is then available.
Caveat: if your plug-in loads “on-demand” (see PlugIn.LoadTime property), the new commands are only available when the plug-in has been loaded. As the plug-in is loaded on demand, you must first issue a known command. Then the plug-in is loaded by Rhino and the new command list is available.
You can override the PlugIn.LoadTime property to return AtStartUp. Once that is known by Rhino (run a known command!) the plug-in is loaded immediately when you start Rhino.
No manual registry editing is required!