This is an incomplete answer, but given @nwerth's lovely, simple solution I won't spend more time on it.
My thought was to start with something like this:
ggplot(mpg, aes(trans, fill=class)) +
geom_bar(position='dodge') +
facet_wrap(~cyl,ncol=1) +
theme_minimal() +
theme(axis.ticks=element_blank(),
panel.grid=element_blank()) +
labs(x='')
The problem with this is that there are unrepresented levels of class leading to variable width bars. I think there was another post about handling that recently. You could calculate the summary before plotting, such that all combinations of trans and class are represented (ie with 0 where necessary) then do the above with stat='identity' for geom_bar. I think.