Tron,
I'm sure you could do it with objects and properties, but I think I'd like to try to do it with an array of strings because it makes presenting subsets of elements to the player as a menu, and making selections just an exercise in simple loops and maths.
Don't flame me if this isn't fully thought through, I'm winging it here, but I envisage something like the following.
Have an array (strings) called 'menu[index]'
Now logically these strings would hold the menu item description. I still propose they would do that, but I'd have the description start at the 12th character position in each element.
e.g.
menu[1]="ppp-aaa-cccChoice #1"
ppp would then be used to hold the parent group for this element, aaa to hold the element's actual group and ccc would hold either the child group or a code to actually DO something rather than present another menu.

So we'd actually have something like;
First Menu presented (actually array elements 1-4 but 'found' by looping through the array and looking for elements belonging to group 000)
menu[1]="000-000-001Choice #1" 'Obviously, we'd only show 'Choice #1' on the actual menu
menu[2]="000-000-002Choice #2"
menu[2]="000-000-003Choice #3"
menu[4]="000-000-004Choice #4"
A selection of '2' would cause us to check the ccc (child/target - third batch of 3) section, this returns "002" which means we need to call the 'display a menu loop' again but finding those elements that have element group = "002". This might find the following subset...
menu[9]="000-002-020Choice #1"
menu[10]="000-002-025Choice #2"
menu[11]="000-002-030Choice #3"
menu[12]="000-002-999Choice #4"
Basically the 'target' part of the chosen element from the first menu is being used to point at its 'children'. As you can see more easily in this second menu, each element is also carrying information for its 'parent' (group 000 in this case) and so going back up the tree is just a case of reading the parent section of an array element, call the 'display a menu loop' and so on.
Of course this second level menu can also have children, which would point at it as a parent, for instance
menu[91]="002-030-080Choice #1"
Now I threw in menu[12] with a child/target value of 999. I would use this as an indicator that the player has chosen to do something that takes him out of the menu. This could be tested for and action taken depending on the index value of the element (or by varying the 'exit menu' value)
For the above to work, the menu structure would need to be prepared on paper first (it ought to be anyway!), but once 'encoded' the actual presentation and selection loops - and maths required to make this all function - ought to be relatively easy stuff unless I've missed something.
Al