I'm far from being an expert on this topic, but this is what we ended up in the past, even in an XPages-free environment.
You did not mention yet, what other approach you have tried to store your custom code. But I agree, that the self-containing nature of an nsf file is one of the extremely strong points of Domino, well worth to preserve. It is only one of the points, that IBM obviously always failed to catch. Otherwise they would have put more effort into topics like storing and distributing your custom Java code.
I'm far from being an expert on this topic, but this is what we ended up in the past, even in an XPages-free environment.
You did not mention yet, what other approach you have tried to store your custom code. But I agree, that the self-containing nature of an nsf file is one of the extremely strong points of Domino, well worth to preserve. It is only one of the points, that IBM obviously always failed to catch. Otherwise they would have put more effort into topics like storing and distributing your custom Java code.