Como outros indicaram, o leitor de um pipe recebe EOF uma vez que não há gravadores restantes. Portanto, a solução é garantir que haja sempre um gravador mantendo-o aberto. Esse escritor não precisa enviar nada, apenas abra-o.
Como você está usando um script de shell, a solução mais simples é informar ao shell para abrir o pipe para gravação. E depois feche quando terminar.
#!/bin/sh
mkfifo P
exec 3>P # open file descriptor 3 writing to the pipe
program < P
# < P tail -n +1 -f | program
echo some stuff > P
cat more_stuff.txt > P
exec 3>&- # close file descriptor 3
Observe que, se você omitir a última linha, o descritor de arquivos 3 será automaticamente fechado (e, assim, o leitor receberá EOF) quando o script sair. Além da conveniência, isso também fornece uma espécie de segurança se o script terminar de alguma forma antes.