1) I was leaning toward what you said at the end - keep your list without the "Back" and then add "Back" on at the last minute. If you keep "Back" in its own string list (a list of length 1), then you can just do ListCombine(menu, back) at the last minute. This will generate a new list with the combined contents of the two.
2) Your visual example suggests a possibility: use objects for your menu data, and then use the parent/child relationship to navigate up and down.
<object name="MainMenu">
<object name="MainMenu_Opt1">
</object>
<object name="MainMenu_Opt2">
<object name="MainMenu_Opt2.1">
</object>
</object>
</object>
You can then hang text and even functionality (scripts) off the objects.
The other way to do it is to have a list, which you use as a stack. When you navigate to a new level, push the current level on the end of the list. When you go to navigate up, grab the last entry and remove it from the list, to "pop" the entry.