What you describe is fairly common. We have a similar “player state” system in our projects. Going on 5+ projects over a decade so it is fairly battle hardened.
- the thing that manages the player states is the PlayerController
- the “PlayerStates” are UObjects and we use a TArray for the state stack / container
- make sure to UPROPERTY() both your states and their container so you can see them in the Editor details panel
- we use regular Push() Pop() terminology for the state stack
- example would be “Walking” state is at the bottom of the stack, the player enters a menu pushing a “Pause” state with some other sub-state info.
AFAIK there isn’t a built-in system in Unreal.
Also: what you are describing as “Scene Tree” in Godot sounds like GetWorld() in Unreal. GetWorld() give you access to spawning things, getting the player controller, getting the HUD, etc. and similar stuff.