The primary reason that smart contracts are basically useless, is because a block chain can't form a consensus about anything external, except for signatures transactions that are authorized by public key cryptography to modify block chain state.
I'm sure they have some not very widespread uses but the "virtual computer" concept is definitely useless, so far.
It can only form a consensus about block chain state transformation with the clock period being blocks and the longest chain rule.
Still, if the clock period is block, and, code-wise, can be used as a ...clock, then there is a clock.
So, say, I write a program which says "I add 42 to 42 to 42 to 42 ...until next block is found".
The result of the addition will be different for a slow vs a fast cpu (the faster cpu will have reached a higher number).