Passing Ownership of a UObject disguised in a UInterface pointer

It sounds like you don’t actually want a copy, you just want the object to stay alive. In which case, just passing a different object as the Outer is definitely what you should do. C++ has no concept of scope in that respect, at runtime it’s irrelevant which class or method you created the object in. If the UObject you’re creating should outlive the current this object, then don’t use it as the Outer, use something you know will have a sufficient lifetime.
Then you just need to remember to store the reference in a way that UE4 GC will know about it - eg. add it to a UPROPERTY TArray on your manager.

I’d just add that creating a UObject purely for the purpose of calling a virtual method on it before immediately letting it get deleted seems a little strange. Can’t say for sure but it suggests there’s probably a better way of structuring things if you’re finding you need to do this.