How are you processing messages in the outbox table?
If you are reading from the Write-Ahead Log (WAL), you can delete the messages as soon as you insert them, as the insertion entry in the WAL will still be there. This is a common practice when implementing this pattern.
You can even take it a step further and write directly to the WAL without even writing to a DB table using pg_logical-emit-message().