While I still haven't got an answer from this list about whether it was really true that one has to close (and not reuse) dataset objects after a committed or aborted "write" transaction, I did get an answer from my code, as it were, and a surprising one, at that.
I found that at app shutdown time, I had nothing (with respect to Jena) to do, as I had already, in each thread which had created a dataset in response to a request for some kind of service, closed that dataset. Since the datasets were not drawn from an open "master" object representing the open store, but from a static source, there is no "master" object to close down. If the threads all had their hands on persistent, open dataset objects, which each (according to your documentation and my own experience) can only be used in that one thread, I would have a difficult problem causing those threads (which may be asleep in a web or other server) to wake up to close the pointer (yes, there may be a "thread close time" hook or the like, but as I have it, I don't need one). This all seems consistent with what we have transacted here before and consistent with my understanding of transaction semantics, and seems to work; please let me know if you think I'm overlooking something. Thanks Bernie