Aren't all the transactions forced to have a destination address?
No. Not at all. This is a very common misconception about how Bitcoin works.
Technically, in the blockchain, there are no addresses at all.
Addresses are just an abstraction that we humans use to make it easier to discuss the concept of modifying control over value.
What ACTUALLY exists in a transaction is a transaction output script. That output script creates requirements that must be met in order to be allowed to broadcast a new transaction that uses that existing output as an input.
The most common transaction types have scripts that create a requirement to provide a public key that hashes to a given value and a digital signature of the new transaction that matches that public key.
However, while it is very fast and easy for computer software to create and validate these scripts, it would be awkward and error-prone if I were to tell you to please create a transaction that has an output which requires both a public key that hashes to (some 256 bit number) and a digital signature of the transaction that spends the output which can be verified with that public key.
So, instead, we all agree that we will represent that set of instructions with a single value (such as a 1, or a 3, or a set of characters such as bc1), and that we will then join that to the hash of the public key, and add on a checksum to prevent typo and miscommunication errors. Once we've smooshed all that together, we call the result a "bitcoin address". Our wallet software knows when it sees the address how to pull it apart and generate the proper transaction output script.
In this case that you've mentioned, a transaction has been created that has an output that does NOT translate into an address. It didn't use any of the standard address scripts, so wallet software doesn't know how to build the transaction, nor does it know how to spend it. Instead, this transaction output is a script that sets up a puzzle. You can satisfy the requirements of the puzzle if you provide the puzzle solution in the input of a transaction that you create. Since wallet software doesn't know how to translate that script, it's something that you'd either have to do by heand, or write your own software to do.
Then, once you've created the proper transaction input with the solution, you would create a transaction output for your transaction that uses one of the standard "address" scripts. In this way, you would assign the bitcoins to the control of a wallet that you have access to.
So, even if the winner solves the scriptPubKey, how can then he/she divert the funds to another destination address?
[/quote]