Finally, we live at an age where even a beginner web developer finds it embarrassing to use table layout for sitebuilding. Tables are very good what they created for: displaying arrays of data. You can style, script, enhance them in many ways.
I often have to hack into CMS systems functionality to make them customized for the clients and requests can be sometimes tricky to do, but I think there is always a simple solution. These clients usually use WYSIWYG editors to manage their pages, but I can't expect that they know XHTML or JSON to manage fancy widgets.
This was the case last time, when I needed to add a tabbed JS widget to a Drupal website. I came up with the idea, that tables can be used for describing data, nothing more and after processing the cells data, the whole table can simply be replaced with the markup for the widget.
This is a dirty hack I know, but at least the users can cope with it. It worked pretty well, the first column is the tab's name and the second column is its contents. There is a valid table attribute "summary" that is suitable for triggering the conversion, the user only have to enter "tabs" to it and the script does the rest.