I'm not saying 3.x didn't have issues. Or any edition for that matter. Just that you're conflating having half a dozen modifiers with the move away from THAC0
To be fair, the move away from THAC0 with 3e was at least /correlated/ with having more than half a dozen modifiers. There were, what? 17 named bonus types in 3e? (Google seems to think it was 18...)
And untyped bonuses could stack with those, and eachother.
Not that typed bonuses are all bad. In 3e, avoiding anything stacking with armor was a simple matter of giving it an Armor Bonus. In the name of simplicity (actually, natural language) 5e does not use named bonuses. But, it still wants some things to not stack with armor, which has slightly confused people, prompting this 1700 word article (that I stumbled about while googling those bonus names from 3), to accomplish what the two words "armor bonus" did in 3e.
http://dmsworkshop.com/2017/05/19/things-you-didnt-know-about-dd-5e-calculating-ac/
I feel like THAC0 gets a bad rap. It's the precursor to 3E's Base Attack Bonus, and came after 1E's attack matrices.
It couldn't help but be briefer in presentation than the two facing pages of attack matrices in the 1e DMG. But the matrices weren't complicated, a table lookup is really pretty simple.
And, THAC0 lost one feature of those matrices: When you had /very/ low (good) ACs, '20' would appear on the table multiple times. The first time, you needed a total of 20, thereafter a natural 20. When you finally got to 21+, you needed a natural 20, and a net bonus. It was a more nuanced progression than 'natural 20s always hit.'
It's actually super simple.
....I feel sorry for poor old THAC0. It has a bad reputation for being complex, when it's exactly as complex as the current method!
A sub-system can be simple, but add to complexity, because it's different for no reason and to no benefit.
d20 consolidated sub-systems that used d%, d6, d20 roll-under, and d20 roll-high (among others) into d20 + mods vs DC. That was a simplification.
THAC0 definitely belonged on the chopping block because it accomplished the same thing as rolling high to hit an AC - a pass/fail roll on a d20, giving a % chance of success with a granularity of 5% - but did it differently, as you explained:
The important thing to remember is that it's the exact same math, but in reverse.
In 3E-5E, you roll d20 and add a bonus in order to beat the target's AC.
In 1E-2E, you roll d20 in order to beat THAC0 minus AC.
So instead of adding a number to your d20, you simply deduct a number from your THAC0. Same maths, just minus instead of plus.
Same maths, two different ways to do them = needless complexity.
The same goes for saving throws vs attack spells. There's no mathematical difference between a caster rolling an attack and his target rolling a save - the distinction is just needless complexity.