Um motivo é provisionar vários serviços criptografados por SSL na mesma porta. O SSL é iniciado antes da camada do aplicativo, o que leva a erros de certificado ao acessar o host em um nome de host que não corresponde ao valor do CN no certificado.
Usando hospedagem virtual HTTP como exemplo:
A camada SSL fica entre o cliente e o servidor da web. Depois que o cliente tiver emitido a solicitação GET (e, portanto, transmitido o nome do host esperado), o servidor já iniciou o SSL. Nesse ponto, é tarde demais para especificar um certificado diferente.
Se você implementar a hospedagem virtual baseada em IP, cada nome de host poderá ter seu próprio IP e, subsequentemente, seu próprio certificado. Claro, os certificados curinga são outra maneira de contornar o problema, mas eles são geralmente mais caros do que apenas alocar outro ip.