It is absolutely possible to write DeFi protocols (and much more) while relying on ZKPs for privacy - this is exactly what Miden was designed to do. The main trick is to reimagine how the state works and instead of using a monolithic state adapt the Actor Model (something used in distributed systems for decades).
Then we can have private actors that can interact with public actors which control the shared state. Or we could have semi-private actors (the state is known to some set of users, but not to the entire network) and these can also interact both with fully private actor or public actors.
This is a very powerful model that covers a large number of DeFi use cases - from anonymous AMMs and CLBOs, to private compliant stablecoins.
And one other nice thing: to write these DeFi protocol, we don't need engineers who understand ZKPs - you can write everything in Rust.
I do like FHE - really cool technology and it does enable a few use cases which ZKPs cannot address (i.e., having truly private shared state) - but it also comes with huge performance overhead for the network.
The beauty of ZKPs is that they actually reduce the network load - a transaction proven locally does not need to be executed by the network (verifying ZK proofs is very cheap) - we call this concept the Edge blockchain. While with FHE, every transaction becomes 100x (or 1000x) more expensive for the network. ASICs will help here for sure, but this also means that every validating node will need to run these ASICs or otherwise they won't be able to follow the network. And requiring every node to have an ASIC is kind of like requiring every Bitcoin node to be a miner.