i would use a combination of get_tree().set_pause(bool)
and set_pause_mode(MODE)
By default all nodes have a pause mode on "INHERIT", this means it will have the same mode as it's parent. Take for example this tree:
GUI (Canvas Layer)
-menu (Control)
--buttona
--buttonb
--submenu (Control - hiden)
---buttonc
---cuttond
to enable main manu you call
get_tree().set_pause_mode(true)
GUI.set_pause_mode(PAUSE_MODE_PROCESS)
GUI.get_node("buttonb").connect("pressed",self,"_open_submenu")
this way your gui will work only with the visible childs of GUI
func _open_submenu():
GUI.set_pause_mode(PAUSE_MODE_STOP)
GUI.get_node("submenu").set_pause_mode(PAUSE_MODE_PROCESS)
GUI.get_node("submenu").show()
Now only the visible childs of submenu will receibe input