a poor-mans solution (haven't tried it):
have each menu button run a process specific to it.
have an object called 'objOpenTab', which is a reference attribute of RegularUser.
each menu item is designated a unique ID.
the process specific to the menu item first tries to find an instance of objOpenTab with the ID you designated for the menu item.
If the ID doesn't exist then an instance of objOpenTab is created with the ID you designated for the menu item and a new tab is opened as occurs now by clicking the menu item.
Otherwise, the process ends with no tab opened.
When the tab is closed there could be a process linked to the close button which deletes the instance created of the ID you designated for the menu item from the objOpenTab.
BUT, if the user closes the tab by clicking the X in the tab title, then you're stuffed because there is no event trapping which could run a process which deletes the instance created of the ID you designated for the menu item from the objOpenTab. But as John wrote, Custom JavaScript code could do this.
Maintaining a record of tabs open at any time kind of leads in to retaining the recreating the user's view state (partially) when they next login.
If they logged out with 15 tabs opened, you could have a process run on login which reopens them.