How do I get inline tags to wrap nicely? Inline tags are presented as a series of &lt;div&gt;s, with no whitespace in the HTML between them. These elements are styled display:inline, the result of which is an unbreakable string. When you have enough tags this breaks layout. What you want is tags to word-wrap around, but they don't.

The only way I can see to achieve this is by hacking core to insert a space after the field-item items' &lt;div&gt;s (or after the content before the closing &lt;/div&gt;.

Is there another way? Perhaps a way for a theme to override the formatter function?
Try using display: inline-block instead. It gives you the functionality of an inline element, but you can apply margins and padding to it just like a block-level element.