Unfortunately, unless you're happy with supporting only specific browsers (IE7/Win, Safari, Firefox 3.5), there's no pure CSS solution to your problem.
word-wrap: break-word; works, but only in IE.
If you're able to alter the text, either server-side (PHP, ASP) or possibly client-side (Javascript), you could write a small function that inserts 'shy hyphens' (­) into your text. That way, text can be broken up at every instance of the hyphen, and shy hyphens will not be displayed if the word is not broken up.
Edit, an example:
bla­bla­bla­bla­bla­bla­bla­bla­bla­ (etc)
will display as follows in your browser:
blablabla-
blablabla-
blabla