Os usuários são parâmetros válidos para o comando cd e, portanto, são oferecidos como conclusão, porque você tem a opção cdable_vars ativado. Com essa opção, cd foo pode ser usado em vez de cd ~foo , o que permite que foo seja qualquer coisa que possa ser til-expandido , incluindo um nome de usuário ou um nome de diretório definido por hash -d (mas não as variáveis do shell, apesar do nome da opção).
Não há nenhuma opção no código de conclusão para permitir diretórios nomeados, mas não tentar concluí-los. Você poderia contornar isso com um wrapper para a função de conclusão para cd .
unset -f _cd
autoload -U _cd
functions[_cd_orig]=_cd
_cd () {
setopt local_options no_cdable_vars
_cd_orig $@[@]
}