É porque * não corresponde aos arquivos que começam com . por padrão. Considere o seguinte diretório:
$ ls -la
total 8404
drwxrwxrwx 2 terdon terdon 8105984 Dec 31 13:14 .
drwxr-xr-x 153 terdon terdon 491520 Dec 30 22:32 ..
-rw-r--r-- 1 terdon terdon 0 Dec 31 13:14 .dotfile
-rw-r--r-- 1 terdon terdon 0 Dec 31 13:14 file1
-rw-r--r-- 1 terdon terdon 0 Dec 31 13:14 file2
-rw-r--r-- 1 terdon terdon 0 Dec 31 13:14 file3.
Vamos ver o que cada um dos globs que você usou se expande para:
$ echo .*
. .. .dotfile
$ echo *.
file3.
$ echo *
file1 file2 file3.
Como você pode ver, o * não inclui arquivos ou diretórios que começam com . , portanto, ./ e ../ são ignorados. A mesma coisa acontece com o seu ls exemplo. Em bash , você pode alterar isso com o parâmetro dotglob :
$ shopt -s dotglob
$ echo .*
. .. .dotfile
Outras camadas se comportam de maneira diferente, por exemplo csh :
% echo .*
. .. .dotfile