Not sure what you mean here. Option 2 presents the dispatcher approach, while option 4 presents the UMG-binding approach (which executes every frame). What do you mean using option 2 in option 4 ?
It’s true that hard-referencing is often overemphasized. If you have one game mode, one game state, one HUD throughout your whole game, then yes all of them will always be loaded in memory and it’s not an issue that they are all interdependent. But generally as the game grows in size, you create more stuff that are specific to certain situations/levels, and don’t want them loaded at all times. For example let’s say the Score widget matters in LevelA, but is not used in LevelB, and for some reason you still use the same GameState for both. The simple presence of a CastTo_ScoreWidget node in the GameState’s BP graph is enough to trigger loading of the ScoreWidget asset in memory, even if it is not used at all in LevelB.