Is there a reason to use multiple hashing algorithms in a single system?
A protocol might rely on using some string $x$ as an index into a set of uniform random bit strings $H(x)$.  The security of the protocol may rely on the $H(x)$ being uniform random and independent for different $x$.

A complex protocol may rely on having multiple independent uniform random bit strings for any particular string $x$, used for different purposes in the protocol.  If you use the same $H(x)$ for both purposes, the security may evaporate.

Here's an example: A deduplicating encrypted storage scheme like Tahoe-LAFS needs to derive an encryption key for each file it stores, and needs to choose a storage index that depends only on the content.  Using a single hash function for both—$H(x)$ as the encryption key, and $H(x)$ as the storage index—is a fatal mistake: a malicious storage server can now decrypt every file you store on it.  But using two different hash functions prevents this: knowledge of the storage index $H_1(x)$ doesn't help to find the encryption key $H_0(x)$.

In practical terms, we implement $H_0$ and $H_1$ in terms of a single hash function with a specially formatted input for ‘domain separation’: $H_n(x) := H(n \mathbin\| x)$, where $n$ is some prefix-free encoding of an integer as a bit string—say the 32-bit little-endian encoding.