Aqui está um exemplo que mostra o comportamento que você está vendo:
SQL> exec dbms_output.put_line('hello')
hello
PL/SQL procedure successfully completed.
SQL> exec dbms_output.put('hello again')
PL/SQL procedure successfully completed.
SQL> exec dbms_output.put(' and again')
PL/SQL procedure successfully completed.
SQL> exec dbms_output.new_line
hello again and again
PL/SQL procedure successfully completed.
A documentação diz "SQL*Plus chama GET_LINES após emitir uma instrução SQL ou chamadas PL/SQL anônimas."
E o procedimento GET_LINES diz "Este procedimento recupera uma matriz de linhas do buffer".
Com PUT você ainda não completou sua linha. E assim não imprime.
O procedimento NEW_LINE também menciona isso:"Este procedimento coloca um marcador de fim de linha. O procedimento GET_LINE e o procedimento GET_LINES retornam "linhas" delimitadas por "novas linhas". Cada chamada ao procedimento PUT_LINE ou procedimento NEW_LINE gera uma linha que é retornado por GET_LINE(S)."
Atenciosamente,
Rob.