Isso chama resolução de nome, do lado do cliente, e virtual host baseado em nomes, do lado do apache.
O lado do apache é mais simples, você tem apenas 1 ip, o apache escuta por requisições na porta 80 deste ip e decide qual é o virtual host baseado no nos headers da requisição. Não há nehuma verificação da existência do nome do host ou domínio..
Do lado do cliente a coisa é um pouco mais complicada porque resolução de nome não é a coisa mais simples do mundo. Usualmente você teria uma entrada de dns apontando teste.sub para o endereço ip do servido, mas como isso é um teste provavelmente não faz sentido registrar um dominio e mantar um servidor de dns só por isso, ademais, provavelmente esse servidor terá um ip interno e não é uma boa idéia apontar endereços públicos de dns para ips internos. Existem várias formas de fazer isso funcionar, uma delas é manter um servidor de dns interno que sabe resolver teste.sub para o ip do servidor, desta forma qualquer cliente nesta rede que usa este servidor de dns saberia resolver este nome. Configurar um servidor de dns local dá um bocado de trabalho mas a vantagem é que você pode criar vários desses domínios de teste sem maiores dificuldades não precisa configurar cada cliente separadamente. Outra solução é editar o arquivo de hosts do cliente (/etc/hosts no linux e mac %systemroot%\System32\drivers\etc\hosts no windows) e cirar a entrada lá. Esta segunda opção é extremamente simples de implementar e não requer nenhum software adicional, porém cada cliente tem que cuidar do seu arquivo de hosts. Resta ainda um segunda questão: por que
http://empresa funciona? Bom, normalmente a ordem de resolução de nomes é:
1. verificar se o nome requisitado é o nome da propria máquina
2. verificar se o nome existe no arquivo de hosts
3. consultar o servidor de dns
Acontece que, no windows, se o nome não é encontrado nestas 3 etapas, o sistema operacional ainda tenta outras 2:
4. consultar o active directory (ou wins dependendo da versão do controlador de domíno)
5. tentar encontrar a host via netbios (se a máquina não faz parte de um domínio ou se o domínio não encontrou a máquina)
No seu caso a condição 4 provavelmente foi satisfeita e foi asism que o SO encontrou
http://empresa, mas caso tivesse falhado - digamos que você tivesse tentando acessar o xampp instalado em outra máquina da rede - o windows mandaria um broadcast netbios para toda a rede com o nome do host a ser resolvido e se houver uma máquina com este nome na rede ela responderá com o seu ip.
Trocando em miudos, e para resolver seu problema rápido, edite o arquivo de hosts da sua máquina e coloque uma entrada:
<ip do servidor> teste.sub
Ah, e não se esqueça de verificar se o firewall do servidor vai permitir a conexão.