Some of the changes are simplifications. The problem is that you have all the other cruft that developed around the initial hacky state. As an example I present exhibit A, C++. "Modern" C++ has many features that can help you write fairly safe code that doesn't leak resources and is relatively thread safe. But it also has bare pointers, pointer arithmetic, direct access to POSIX APIs, etc. etc. from its early years.
Some languages, Go IIRC, have invested in tooling that will take an old codebase and bring it up to a more current standard. C++ clearly has not.
"Can't break old code," is probably the single largest source of tech debt and language complexity. How do you burn down tech debt in the form of old code you do not own? How can you simplify when someone, somewhere used the complicated forms?
Even if tooling like Go's is not 100%, as long as it does 99% of the job and makes the burden a lot less, people at least have the option of moving forward. Most companies will not because people are almost always short sighted about this, but at least the possibility is there.
Trying something that looks about right, and iterating to polish it works just fine in most other types of programming. But not in language design apparently. At least not if you have a user base.