Resposta curta :
Porque está programado para ignorar múltiplos usos de um sinalizador.
Resposta longa:
Como você pode ver no código-fonte de ls , existe uma parte com a função getopt_long() e um grande switch case:
1648 int c = getopt_long (argc, argv,
1649 "abcdfghiklmnopqrstuvw:xABCDFGHI:LNQRST:UXZ1",
1650 long_options, &oi);
....
1654 switch (c)
1655 {
....
1707 case 'l':
1708 format = long_format;
1709 break;
....
1964 }
A função getopt_long() lê todos os parâmetros fornecidos ao programa. No caso, se -l a variável format estiver definida. Portanto, quando você digitar vários -lllllllll , essa variável será definida várias vezes, mas isso não alterará nada.
Bem, isso muda uma coisa. Essa declaração de maiúsculas e minúsculas deve executar várias vezes, devido a vários -l sinalizadores. ls precisa de mais tempo para ser concluído com vários -l flags. Mas desta vez não vale a pena mencionar. =)