I'd say it's the other way around - a lot of usages of !important are due to lack of understanding of CSS specificity, usually as a symptom of something else like using IDs in selectors..
If you avoid using IDs in selectors and avoid deep nesting of classes, then overriding styles works as you expect - apply a more specific selector to override the style.
Selector order only comes in to play rarely, and you can structure your files to start with less specific (base) styles first.
I see !important as more of a workaround than a solution, and I don't think it is used as it was originally intended.