I think it is a matter of understanding how Tendermint works. It is a powerful distributed state machine that gives you a lot of guarantees and can be considered a top in class solution for what it was designed for. The better question would be if task XYZ is something that should be done by Tendermint, not why Tendermint cannot do things in a certain way.
That depends on how the contract execution VM is implemented. It could run in the enclave entirely and then you just pass a gas limit as a parameter into it. Or the enclave could report after every operation how much gas it consumed and the surrounding code terminates it at some point. But I don’t know which approach the team is working on. Details are discussed e.g. here: (Dev discussion/Issue) WASM implementation
The general idea is something like: executing +
costs 2 gas, executing -
costs 2 gas, executing *
costs 3 gas, executing /
costs 5 gas, executing <<
costs 1 gas and so on and so forth. You need a VM that can count the executed operations and report during the execution. Then you can calculate gas cost and set a limit. This is often called metering.
The whole metering is not specific to distributed VMs. Since the exact same full execution happens on every node, you can look at a single node only. The only additional aspect is that the execution needs to be deterministic to ensure the same result is computed on every node.