What you describe only happens with VB/VB.Net/C#.Net-developed plug-ins (Active-X plugins)... if a plug-in is a pure DLL (I don't know how to call that, but I mean what you get when you compile the plugin in C++ with Patchou's example), you can delete the physical file within 5 seconds after MessengerPlus_PluginChange is sent
Patchou has explained why it acts like this but I forgot where