You might look at how Blender does it. I assume its probably done in C, but its probably quite readable.
My initial thought is a Manager scheme:
You have a master class, the ‘Tile Manager’ which holds pointers to all the tiles (you’ll probably use a vector or array for this, though some other mapping may be suitable as well). Its the ‘top level’ view element. You then have a separate tile class that’s responsible for whatever goes on inside a tile.
More in detail:
The Tile Manager is responsible for drawing borders around tiles. It intercepts all events destined for tiles. For Example, if it detects a click (or whatever you so choose) on a boundary it enters a resize state, detects which of the tiles need updating and puts them in a resize state. The user can then resize by moving the mouse, etc. When the mouse is clicked again, the appropriate tiles exit the resize state and the tile manager exits the resize state. You’ll have to decide what to do at corners.
On a draw update, you just redraw borders (you probably don’t really need to do this unless in a resize state or for some reason borders change), and then tell each tile to redraw itself. The main data that will be passed between the manager and a tile are bound/coordinate information and interface/control events. They shouldn’t be concerned with what each other is drawing.
It’ll need more finessing than that, but a lot of what actually needs to happen and what tools you’re using will determine where exactly to delegate certain things. In principle its just designing a FSM really (like most programming things are).
Do you plan on using OpenGL to draw, or devising some other method? If OpenGL, you’ll want to look into how to handle multiple viewports and also consider what’s going to handle border drawing, etc.