Do I understand correctly that there is concern about the fact that the "randomness" is actually pseudorandomness (i.e., it is deterministic, but not predictable)?
In this case, we can just put some "true randomness from the real world" in: take some parameter which is rapidly changing in time and is not controlled by one person or entity, and use it as an additional randomizer. For instance, total amount of all transactions (and/or fees) in the previous block could act as this randomizer.
We can't coz an entity with a lot of computing power will be able to game the system.
K might see the issue.
How about this?
Normally when forging, you can't create false transactions, you can only hold back transactions so they don't get included or add your own transactions. Every block is forged by 3 separate forgers, this ensures that they can't cheat by holding back transactions, since as long as at least one of them broadcasts every transaction, then the block-chain is intact.
Or use this idea of including the number of transactions/fees in order to randomize it. But it's not the number of transactions/fees in the current block, it's the number of transactions in a future block which cannot be determined and/or manipulated in the current block.
Or something along the lines of what I was suggesting where everyone sends tiny little transactions to another random person, except are special transactions that don't get included in the current block, they get included in the previous block and every account can only generate on such tiny fee, either they send it or they don't and they pick an address to send it to. Also, this is not broadcast to the network until the next block so unless you forge two blocks in a row, you have absolutely no way of knowing what is about to happen, this could be extended to 2 or 3 blocks in the future. So you have to forge multiple blocks in a row in order to learn all the information early enough to manipulate it. In fact you could purposely send these tiny little transaction fees to only 2 out of the 3 computers forging, and at the end of the block, they are shared by all.. or maybe only after all blocks that have forged that can affect this hash (so say 10 minutes), you share the information about these tiny special transactions to the rest of the network.