tl; dr : tar -cv dir | wc -c - | cut -d' ' -f 1 | awk '{print $1/1000"K"}'
du na verdade não conta o tamanho do arquivo em si. Apenas pede ao kernel para consultar o sistema de arquivos, que já controla o tamanho do arquivo. É por isso que é tão rápido. Por causa disso, e o fato de você estar contando um fluxo, não um arquivo, du não funciona. Meu palpite é que 1.0K é um tamanho codificado para /dev/std* no kernel.
A solução é usar wc -c , que conta bytes em vez de consultar o kernel:
$ tar -cv dir | wc -c
Se você deseja uma saída semelhante a du -h :
$ tar -cv dir | wc -c | awk '{print $1/1000"K"}'
O awk transforma o número em um resultado legível por humanos.