The hash type used for the block is calculated and added for the block header. The hash type that is supposed to be used is used is shown through the block header. Because we know what hash type is used it is easier to verify the legitimacy of the block. But, how do we verify that the correct hash is chosen? We would need to calculate that. But, then that would defeat the whole point. In the whitepaper it says the hash type is given so that you don't need to calculate it. Who would be calculating and verifying the hash type?
The hash type used is determined from a pseudorandomly generated table for the first 200k or so blocks and then is simply derived from the Pearson hash of the 1st, 2nd, ... , nth block after reaching this predefined block height.
In the case of both this and N, they are (eventually) both chosen from the blockchain itself, but through previous blocks, never current blocks.
Note: N values are calculated from the last 8 blocks in a block cycle, but also not current blocks. The N value is calculated from a much harder scrypt hash of the merkle root. I think the merkle root is able to be gamed though (by manipulating coinbase transaction) so in the next draft this should change to to the block hash rather than the merkle root. We might also need to do another scrypt hash instead of the Pearson hash for secure hash algorithm order and then use that to determine the order of SHAs -- this could afford more security and is easy to implement.
We verify that the correct hash is chosen the same way we do in bitcoin: We require that the hash has a number of leading zeroes (difficulty). Because the type of hash in also in the block header, you could never use one of the other hashes too (the network clients would reject it even if it satisfied the correct number of leading zeroes).
Edit: If we use the block hash though, we need to contend with the fact that we have essentially a truncated input because of leading zeroes. This might be make it a little less secure (though I doubt it). In this case, we can just use the last 256-bits (which will likely never be 0's) of the block header hash for use in the hard hash to calculate N.