double loading can solve the problem with crashing on unload however your dll still remains in memory unless you export a Remove or similar function and then handle that yourself.
If im not Mistaken isnt SubclassWindow a method of CWnd in MFC? Of course theres nothing saying you cant use MFC in your dll but most people tend to shy away from it i think its all personal taste.