I do agree that theoretically writing everything from scratch allows you to get much better results than a pre-made framework. Besides that, Substrate has to make some sacrifices for the generality it provides.
Consider replicating Bitcoin in Substrate. Let's focus only on one facet of such a project — the database. To validate a bitcoin block, one only needs to store the set of UTXO. Bitcoin does not require a state trie. If you were to implement bitcoin on top of Substrate, you would store the UTXO in the state trie. That comes with the price of maintaining the state trie, e.g. computing the state root. Who cares about bitcoin, you may ask? The point is though that Substrate makes some assumptions for you. Those can fit your use case, or they can interfere.
If you take the logic to the extreme, you should not write programs for operating systems. Instead, write the programs directly for bare metal, forgoing an OS just because an OS makes choices that you might not want or need. That's not what we see in reality, though. It takes absolutely insane amount of effort and obscure knowledge. People do that but only when they absolutely have to and when they can afford that. Linux is good enough for the overwhelming majority of use-cases.
I think this analogy works here, so I will further develop it.
It takes enormous amounts of effort and expertise. You will have to fill in a database, trie, mempool, and VM, to name a few, and each of those is a rabbit hole of each own. Each component needs to be implemented, tested, optimized and maintained. That takes time and always more time than you expect (even after the adjustment).
Similar to Linux, there is space for reaping the fruits of economies of scale. More users make for more contributors. More contributors make for more quality software. Also, more quality software attracts more users. Many bugfixes are written with blood. Thousands of developers' serendipitous insights lead to innumerable optimizations. It's very hard to challenge Linux, even if your scope is way less general. Also, there is a point about a talent pool. There are certainly people who can write programs against Linux, and there are a decent number of kernel developers.
This is not to say that Substrate is in such a position currently, but it is on the way there. It seems to be the general dynamics of framework vs. roll-your-own solution.
Rolling your own blockchain is a dangerous endeavor accessible only to very well-funded entities and makes sense if the benefits are extremely high. If the team wants to innovate only on the STF (in Substrate we call it Runtime), there is not much sense in writing the blockchain from scratch. In the case something does not work well in Substrate for a particular use case, the team would be better off lobbying the change to make it work better or, in the worst case, forking Substrate.