It's not one or the other, they're just different tools.
The team is working on an entirely new system called Jetstream to eventually replace it.
The core of it is this point:
"Functions placed at low levels of a system may be redundant or of little value when compared with the cost of providing them at that low level."
That is, in order get that message redundancy or exactly once delivery, or message persistence, you pay a high cost, and you may be better off delegating to the endpoints.
This blog provides a good overview
https://blog.acolyer.org/2014/11/14/end-to-end-arguments-in-...
Here is the original paper
http://web.mit.edu/Saltzer/www/publications/endtoend/endtoen...
https://docs.nats.io/nats-streaming-concepts/intro
"..Message/event persistence - NATS Streaming offers configurable message persistence: in-memory, flat files or database. The storage subsystem uses a public interface that allows contributors to develop their own custom implementations."
and
"At-least-once-delivery - NATS Streaming offers message acknowledgements between publisher and server (for publish operations) and between subscriber and server (to confirm message delivery). Messages are persisted by the server in memory or secondary storage (or other external storage) and will be redelivered to eligible subscribing clients as needed."
Disclaimer: I'm the author and former core contributor of NATS and NATS Streaming.