I understand this complain as it is not obvious why things are like they are, but there are somewhat good reasons!
> I expected to be able to compute a hash and see whether the file is in the IPFS network; then upload it if it not in the network.
There is no upload in IPFS. Either you serve the file from your peer or you don't. It should be irrelevant whether that file was already present in the network or not.
Thanks.
One major hurdle is browsers not being made for p2p. We will need http gateways and other centralized compatibility layers for the time being, which are costly and very prone to abuse. I have hopes in better webrtc support to improve interop with browsers.
Other than that, a DHT at the scales we aim for in terms of indexed content is a problem when 95% of nodes are clients which don't contribute to it. NAT hole punching and supernodes will help.
With IPFS becoming the delivery layer for content stored on Filecoin, and being the standard storage layer for NFTs, there are certainly incentives for the protocols to be used and usage to keep growing heavily.