Este verbo, com o sentido de existir, é impessoal pelo seguinte:
No português antigo, não significava existir, mas ter, possuir. Ainda hoje se encontra com este significado em vários casos, como nesta forma de agradecimento: «Bem haja pela ajuda que me deu». Isto é: «Tenha, possua o bem pela ajuda que me deu».
Suponhamos agora o seguinte no português antigo:
(a) O João há (= tem) aqui uma bela casa.
Uma pessoa que passasse naquele sítio, mas sem saber qual o dono da casa, poderia dizer:
(b) Há aqui uma bela casa.
É o mesmo que:
(c) Tem aqui uma bela casa.
Note-se, até, esta coisa interessante: no Brasil, usam frases do tipo da (c), sem sujeito, e cujo verbo tem o significado de existir. Julgo que não estou errado. Em Portugal não se usa.
Com o decorrer dos anos, em presença de frases do tipo da (b), os falantes foram perdendo a consciência de que o verbo haver significava ali ter, e passaram a atribuir-lhe o significado de existir. Conservou-se, no entanto, a impessoalidade nas terceiras pessoas do singular. Por isso, uma bela casa é complemento directo de há. Outros exemplos:
Há/houve/haverá/havia/etc. muitas pessoas, belas casas, etc.