Note that this page describes an architecture that is not yet in the product, and is currently on hold. See bug 578512.
groups.jsm defines TabViewGroups, which keeps track of all the tab groups in the system and provides events (not literal browser events) to keep track of when new groups are created. You can subscribe to individual groups as well, which send out events for when they're modified or destroyed. tabs.jsm does the same for tabs, with TabViewTabs.
While the intention is to make it look as if all tabs can be available in all windows, at any one time any one tab is attached to only one window. When the user requests to open a tab in one window while the tab resides in a different one, we have to swap the tab from window to window. In fact, we do this for entire groups of tabs, so that the tab bar looks correct. To mirror this, we also associate groups with specific windows, and store them with that window's sessionstore.
Speaking of display locations, at the moment all Tab Candy frames show their contents the same size. It is our intention to add a scaling value to each Tab Candy frame, so smaller windows will scale their contents down.