I think the best way would be to use the DOM to your advantage and not
worry about the programmatic definitions. The container elements would
be DIV drop targets that can have the other component types as their
DOM children. All component types would be draggable obviously. Since
the DOM is doing the heavy lifting w.r.t. ownership, and events
bubble, it becomes almost trivial to determine which element is being
dragged. When containers get dragged, they automatically drag their
children with them since they are owned in the DOM.
The CSS *may* become a little tricky since the origin of an element is
determined by its parent when position: absolute is used, but that is
just a bit of simple math to fix (and I actually think the plug-in
gives you position relative to the drop target as well.)
When you want to actually use the nesting relationship in your code,
you'd use jQuery to traverse the DOM and find control/container
relationships starting at the root container element.
That's how I'd do it anyways. I hope that that sketch helps out a bit.