Why does each block store a Merkle root? I understand how a Merkle root is calculated and stored in the block. But how do miners verify a transaction using the Merkle root?

Here are 18 conditions that verify a transaction. None of them uses Merkle root.
Merkle roots do not verify transactions, they verify a set of transactions.  Transaction ID's are hashes of the transaction, and the Merkle tree is constructed from these hashes.  It means that if a single detail in any of the transactions changes, so does the Merkle root.  It also means that if the exact same transactions are listed in a different order, the Merkle root will also change.

So the Merkle root is cryptographic proof of which transactions are in the block, and which order they are in.  It provides a convenient piece of information to be included in the block header which is then hashed and included in the next block header.  Without the Merkle root in the block header, we would have no cryptographic proof of which transactions are included in a block, nor proof that their contents haven't been tampered with.

Using a Merkle tree is preferable over a hash chain or a hash of concatenated transactions because it allows for a much quicker and simpler test of whether a particular transaction is included in the set.  For more details, see the section on Merkle trees in the Developer's Guide.