This issue is specifically a problem with the design of the Solidity language. There is a rich body of research on formal languages for contracts (see this survey
or this post
The issue impacts some, and not all, contracts on Ethereum. And developers of future contracts can avoid writing exploitable contracts by closely following guidelines and best practices. This does NOT mean that Ethereum is permanently broken.
The Solidity compiler can warn programmers of this particular issue.