O GNU cat ignora -u porque sua saída é sempre sem buffer . Então, quando você pede uma saída sem buffer com -u , você a obtém (mas também a obtém mesmo quando não a pede).
O GNU tail tem o mesmo comportamento sempre sem buffer.
Para provar isso, em um shell eu fiz:
while :; do echo -ne "hello\t"; sleep 1;done > testtail
que acrescenta a palavra "olá" seguido por uma guia, a cada segundo (sem novas linhas)
Em outro shell que fiz ( cat -T é semelhante a cat -v - mostra as guias como ^ I):
tail -f testtail | cat -T
que me dá:
hello^Ihello^Ihello^Ihello^I ...
atualizado a cada segundo.