Eu acho que você tem um equívoco fundamental sobre a divisão do trabalho entre o terminal e o shell. O comando não executado fica dentro da memória do bash, não está no terminal. Assim que você digita um caractere ou uma tecla de função, essas informações são enviadas para o bash, e é o bash que gerencia os comandos de edição, que atualiza a exibição, fornece a conclusão e assim por diante. A biblioteca readline faz parte do bash. Para mais detalhes, leia Qual é a diferença exata entre um 'terminal', um 'shell', um 'tty' e um 'console'?
O resultado é que o código que você quer escrever para manipular o comando tem que ficar dentro do bash: ele precisa ir entre uma parte do bash e outra parte do bash.
Você pode colocar um programa intermediário entre o terminal e o bash, mas se você fizer isso, perderá o benefício da conclusão e de outras sutilezas.
A variável READLINE_LINE
foi introduzida no bash 4 porque não há como fazer a mesma coisa no bash 3. Se o que você está fazendo exigir, sua melhor opção é mudar para o bash 4 ou zsh.