I think your approach should be to do exactly what you did and create custom css to change the look.
myIconButton.dijitButton .dijitButtonNode {
border: 0;
background-image: none;
background-color: transparent;
box-shadow: none;
}
var button = ...
dojo.addClass(button.domNode, 'myIconButton');
To answer your question, you can create your own button widget with a custom template in which there was only an image source.
dojo.declare("MyIconButton", [Button], {
templateString: '<div><img src="${imageSrc}"></img></div>'
});
. , , MyIconButton, Button .