Am I missing something obvious?
<< This :)
Create your own widget, create a superwidget, steal/borrow ideas from other widgets
Top pane, a bunch of buttons, bottom pane, load active tab
When you click a button, when you load its pane, you change its apperance
Middle click can hide button...
There are two-four static/fixed button, for scrolling through tab-buttons, creating new ones, popping up a menu/list of all tab-button
The button list takes up most of the memory (but doesn't have to, cheapest implementation), it is scrollable ... or a canvas, whatever
The bottom pane is loaded/unloaded on demand
This way you choose how many buttons are shown, how big they are ... Tk::Notebook is simple (pretty much they all are)
Search for packforget, notebook:), see Tk::NoteBook memory usage, TK: adding notebook tabs dynamically, Tk::TabFrame, Tk::DynaTabFrame, http://docs.activestate.com/activetcl/8.5/bwidget/PagesManager.html, http://docs.activestate.com/activetcl/8.5/bwidget/NoteBook.html
Prima::Notebooks, Wx::Perl::ListView, ...
wxperl_demo --show AUI #wxAuiNotebook
wxperl_demo --show wxNotebook
wxperl_demo --show wxRibbonControl