Yeah, this is kind of annoying (it's the same in Rust).
I used to wonder if it was just for performance that they don't count "characters", because that's obviously what we want to know.
But turns out characters is a hard to define concept, and certainly unicode code point don't correspond to characters. There are all kinds of languages and even symbols and pictures in unicode, many made up of different 'parts'.
It's not a technical issue, the real world is just messy. I think it's the way other languages are going too. It's one of the bigger changes in Python 3 and even Java might change (Java actually already had unicode, but chose utf16).
This is an interesting article about the topic.
Monospace also gets tricky, I've switched to proportional fonts for most coding.