I have fairly frequently written some kind of recursive descent into collections. Like many people, I've had to special case strings, which are pseudo-scalar, and I don't want to descend into.
But one thing I don't think I've ever tripped over is descending into single characters, but then wanting those not to be iterable. I understands how code could hit that, but for me the scalar level has always been a whole string, not it's characters. Yes, of course I've looped over strings, but always with the knowledge there is no further descent.
Changing strings is just too huge a change in Python semantics. But we could create a new type ScalarString or AtomicString that was "just like strong but not iterable." I'm not sure if it would subclass string, but it wouldn't directly change the string type either way.
This new type does not need to live in the standard library, but it could. Conversion to and from AtomicString would be on the user, but it's easy enough to code.