Bah, arguing about semantics will never stop I guess
I've done a few big and small projects and I concluded that sometimes semantics aren't the holy grail. Re-usability in your code is.
<span style="color:red">Warning!, do not eat someone else's cat!</span>
Isn't semantically correct. It's presentation-code in markup, which is a bad thing.
But what's a lot worse is that this code is not reusable.
<span class="red">Attention, Frogs are not toys!</span>
That is reusable, but semantically incorrect. How about:
<span class="warning">No feeding the kiwi's!</span>
That's more like it, but wait there's a problem.. What if we've got like 5 types of these warnings in different colors?
<span class="warning red">Do not set this on fire</span>
<span class="warning yellow">No making love in the forest</span>
<span class="warning orange">You passed the speed of light</span>
....
But wait didn't we just said that adding classnames like 'red' are semantically incorrect?
Would this be the way to go?:
<span class="warning severe">You got run over by a truck</span>
<span class="warning medium">You're out of icecream</span>
<span class="warning low">Your girlfriend cheated on you<strong>again</strong></span>
I'm not sure there's anything gained here really, in fact I think this abstraction is a bad thing. At some point you must realize that you are ultimately doing presentational stuff.
As long as you write code that is (re)usable the semantics take a backseat.
I'm not saying semantics are irrelevant, but it's also not the most important thing in the world.
<strong>I'm a big text, and proud to be so!</strong>
You can override it's style just fine even without a class in your stylesheet.