É fácil criar dinamicamente a string e avaliá-la:
eval "$(echo -n 'pr -mt '; while read ext; do echo "<(ls -1 *.$ext)"; done < list |tr '\n' ' ' )"
onde list
seria o arquivo (possivelmente um fifo) representando a lista de extensões das quais você deseja construir o comando.
<()
essencialmente cria FIFOs sem nome. Uma alternativa sem evalescência pode ser usar nomes:
while read ext; do mkfifo ${ext}.pipe; ls -1 *.$ext > ${ext}.pipe & done
pr -mt *.pipe
rm *.pipe #remove the named pipes when done
O texto acima assume que você não possui outros nomes de arquivos terminados com ".pipe" em seu diretório.