The method I used was based on flags. Then there is a call routine for each menu display which detects the flags and displays the appropriate 'main menu' text. The left/right scroll buttons cause a variable to count up/down for all menus. Changing this variable DISPLAYS the different main menu items. Using indirect addressing for the text, and assigning a known max. text size (an offset (multiplied by the menu item #) that u add to the start address of the menu text items which selects the correct text.) makes it scalable.
An ENTER press here selects the current menu ...flags it and then displays the submenu item list that works the same way as the main menu, and so forth as deep a menu tree as u like.
Clicking the 'ENTER' key again flags the submenu item as active and this changes the display to the item setting/value which flashes. The left/right keys now alter the 'value' here and the ENTER key accepts it and assigns it to the correct variable (based on which menuitem & sub menuitem is currently selected, I used indirect addressing here again) AND bounces the display 'upward' back to the last submenu text item. I use a longpress of the 'ENTER' key to climb the menu tree right back out of the menu, step by step and a short press to descend it or 'select' as described.