I disagree with this assessment. When I have code that interacts with NATS, my goal is to test how it interacts with the NATS client, not with NATS proper. This allows me to test a *much* smaller surface area and also test aspects of testing that cannot be easily done/provoked without mocking, such as testing that my client closes its connection or handles a sudden error. (I shouldn't have to, say, manipulate the process's file descriptors in order to simulate a flaky network, for example.)
IMHO, as a principle, every Go library should expose only interfaces for its primary "objects". Obviously, that's a bit late in this case. But interfaces could be provided for existing structs, at least.