I cannot confirm or repro your behavior so I will answer only the question regarding the scope of OaEnablePerUserTLibRegistration. The API's effect will last till oleaut32.dll (from which it is exported) is loaded. So if your scenario is
1) Call OaEnablePerUserTLibRegistration (which may or may not result in loading of oleaut32.dll ).
2) unload oleaut32.dll
3) Call RegisterTypeLib (directly or via ATL)
In the above scenario, calling RegisterTypeLib will reload oleaut32.dll and you wont get the desired registry redirection effect. However, if you do not do step 2 then you would certainly get the desired registry redirection.