Widget 'Remove From Parent' not enough

I had the same problem like you do and many people more. I don’t have a specific answer but I used this and this

I think garbage collect should be working and its not a heavy thing especially if you are in menus that time. There is something also called ForceGarbageCollect in c++, which is usefull as well I use for animation blueprints.

GEngine->ForceGarbageCollection();

If you mark something as garbage it will eventually collected afaik. However if something is not referenced to anything like the removed umg, lingering in memory, generally they get garbage colected after a while.