The problem is, what if someone else sends the transactions with your public key. Of course, you don't send the private key, but how do you unfreeze your funds. Does it timeout? What if some-one DoS attacks you by sending another transaction in the moment it timeouts?
If it timeouts, the miners may also steal your coins by claiming that you didn't send the private key, wait for the timeout and then mine a different transaction with your revealed private key.
You may think you can have three one-time functions, private key -> public key -> address to avoid the first problem. Then only you know the public key and can send the first transaction. But that also doesn't help, either. The moment you want to spend your coins some peer may use the information to double-spend the coins. The miners don't know which to include and may include the wrong one. Then you are back at the situation where the honest person has to somehow convince the miners to switch to a different transaction.