Aquí hay un ejemplo que muestra el comportamiento que está viendo:
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.
La documentación dice "SQL*Plus llama a GET_LINES después de emitir una instrucción SQL o llamadas PL/SQL anónimas".
Y el procedimiento GET_LINES dice "Este procedimiento recupera una matriz de líneas del búfer".
Con PUT aún no has completado tu línea. Y entonces no se imprime.
El procedimiento NEW_LINE también menciona esto:"Este procedimiento coloca un marcador de fin de línea. El procedimiento GET_LINE y el procedimiento GET_LINES devuelven "líneas" delimitadas por "nuevas líneas". Cada llamada al procedimiento PUT_LINE o al procedimiento NEW_LINE genera una línea. que es devuelto por GET_LINE(S)."
Saludos,
Rob.