Reason one is that most applications have an on-chain part and an off-chain part. Only the simplest of applications will have an entire 100% on-chain design.
The design space of what your code can do on-chain is very limited. Blockchain consensus is highly rigid (you agree with