I solved the problem, although it only works if the "primary" connection goes down as well (but that's a workable solution in my case).
For those who may care, here is the code (slightly modified) which solved my problem:
if not CheckConnection(OracleSession1) then
begin
try...
I use a TOracleEvent component to receive dbms_pipe messages.
According to the docs, the TOracleEvent duplicates a connection to avoid interfering with the main session.
How can I make sure the duplicated connection is restored after the connection has been broken...