actually, it wouldn't be too difficult to change CanvasWidget.cxx such that it could reuse an existing canvas - on the other hand, this module is going to be phased out soon, and Tom's suggestion is better in that it encourages a modular design.
Like I mentioned earlier, once you use a layered design, it shouldn't be too difficult to reuse your canvas object (Nasal) for different purposes, including cockpit instruments, but also GUI dialogs/widgets/windows.
Just try to think in terms of responsibilities and introduce another layer for each different responsibility, then you could also add a helper method to replicate a canvas in another texture, for use by the CanvasWidget
Once you think about it, it's really just a simple loop that copies a property tree branch to another location, so not really complicated.
EDIT: lol, same answer