The short version is that if you want to use the GXT TextButton class, and style it to your own specific needs, then you need to completely style it. One option is to start with the built in themeing, and change in one piece at a time. Another is to use one of the GWT button classes, and have a simpler dom to work with, and not worry about cross browser differences.
Longer answer, assuming you stick with GXT buttons:
At present, the button is styled by 9 images, in the typical 9-box pattern:
This enables each corner to be rounded, even for browsers that don't support rounded corners. Likewise the middle sections might have gradients to let them be drawn differently for browsers that don't support that feature (or are slow to draw them).
top-left | top-center | top-right
middle-left | middle-center | middle-right
bottom-left | bottom-center | bottom-right
Nine images for each button. Now multiple that by three possible states that a button can be in - normal, over (or focused), and active (or toggled) gives us 27 different images that need to be customized.
If all browsers supported alpha transparency, we could make these images transparent and let background-color set a color that could bleed through - this wouldn't be quite perfect (rounded corners again), but we could get close.
We're working on a theme builder that will allow more control over styles and will generate images for the browsers that need it, and possibly use CSS3 for for those that can support it.
In the mean time, as I said, if you want the same button api/lookandfeel/cross browser consistency that gxt's TextButton offers, making the 9-box images is really the way to do it. Editing those appearances gives you as much control as possible as to how any given widget or cell should be rendered. You don't need to use images at all, and can even use your own html structure, such as just drawing a <button> and giving it some css styling.