The only way using GWT is extending the CellTable
implementation and create your own hacking code in the part where CellTable
creates its header. Also you have to consider adding many methods to add buttons, handlers etc. I have deal with this before and it is a very tedious task.
But you have the option of modifying the DOM
once the table has been created. There are many ways to do that, but the easier way I know is using gwtquery aka gquery.
In your case I would use a code like this:
// import gquery stuff
import static com.google.gwt.query.client.GQuery.*;
// Create your table and add its colums
final CellTable<MyObject> celltable = ...
[...]
// Delay until the table has been full rendered, I use gquery delay() because
// of its syntax but you could use Scheduler or Timer as well
$(celltable).delay(0, new Function(){
public void f() {
// Now we add a div to each header, you could add any html though
$("th", celltable).prepend($("<div class='mypanel' style='height: 40px'/>"));
// gquery's widget plugin is able to promote certain dom elements
// like div/th/... etc into HTMLpanels
GQuery panels = $(".mypanel", celltable).as(Widgets).panel();
// gquery can return a sorted list of widgets asociated with a set of elements
List<HTMLPanel> list = panels.widgets(HTMLPanel.class);
// Now you can add any gwt widget to your panels
for (int i = 0; i < list.size(); i++) {
list.get(i).add(new Button("Button: " + i));
}
}
});
Here a screenshot of what produces the code above:

This approach implies that you have to import gwtquery into your project, but honestly, I dont imagine me working on a GWT project without it :-),
Gquery helps a lot when designers ask for enhancing gwt-widgets and you don't want to enforce tweaks (which most times implies complex coding and investigation) to do very simple things like to modify the dom generated by a widget.
Additionally Gquery comes with a lot of stuff you can take advantage of, like easy ajax syntax, promises, plugins, use js methods and properties without writing jsni, etc.