By adding a checkpoint at block n, you force your client to refuse chains if the hash for their block n is not the one of the checkpoint, so the guy can't revert the blocks older than n
A second benefit is that you can skip signature verification. Checking that every transaction is signed properly is the major CPU load for downloading the blockchain.
The reference client still checks each block to make sure no double spends happened and that the minting rewards were valid, but it doesn't check that the transactions were properly signed.
Once it hits the last check-pointed block, then signature verification is switched on. This speeds up downloading the chain. It turned out that CPU load when checking the signatures was the bottleneck. Even though the chain is many GB long, network speeds were fast enough so that the CPU was the bottleneck.
The older your checkpoint is, the more signatures you have to check "manually".
It is possible to turn off checkpoints, if you want to fully verify the chain yourself. I don't know if they have a way to keep checkpoints but still check all signatures anyway.