I too ran into this issue and I expected the widgets to have been garbage collected. A lot of times I spawn an instance of a UMG widget I know I will later destroy and not have a reference to at all, so it being in memory is not useful.
Also I wrote my game to dynamically recreate the HUD completely when a new pawn is possessed or when my game enters/exists VR. I noticed I actually have old instances of my widgets still running code that they shouldn’t be since they’re supposed to be deleted, and I get all sorts of weird errors with references being set to none. It was a huge mystery to me until I debugged with Blueprint Debugger and saw I had way more instances than I was supposed to of UMG widgets.
I had some success with ConditionalBeginDestroy but it seems like I need to somehow call this for every child UMG widget too?
Actually I solved this by calling Collect Garbage after.