I agree with the arguments the OP brings forward.
That would keep the new class semantically as a string,
and they could implement all of the str/bytes methods and attributes
so as to be a drop-in replacement - _and_ add a proper `__setitem__` so that
one could have a proper "mutable string". It ust would use StringIO/BytesIo as
its "engine".
Such code would take like, 100 lines (most of them just to forward/reimplement
some of the legacy str methods), be an effective drop-in replacement,
require no change to Python - it could even be put now in Pypi - and, maybe,
even reach Python 3.9 in time, because, as I said, I agree with your points.