Well, it was made that way because ctrulib now has ref counting for services handles.
This makes sense if in general there only needs to be a single handle per service, but this doesn't seem to be the case for the Filesystem service. Again, for oot3dhax_installer, I had to use
fsUseSession() and its counterpart to be able to get a second handle that could then open an Archive to manage access to OOT's save data.
If you don't mind indulging another question, while porting svdt to ctrulib-1.0 I encountered more Filesystem issues. In particular, svdt reads the title of carts, and I was unable to get any
fs:USER handle that wasn't the main one (the reference counted one, returned by
fsGetSessionHandle()) to open a file to read from the game cart directly. If I tried to use any other handle, I'd get error 0xD9004676 (3dsbrew says this is essentially a permission denied error). I was forced to use
fsEndUseSession() to have the main handle be the one visible to FSUSER_* functions when I wanted to access the game cart, then I had to restore the handle associated with the save file Archive (another call to
fsUseSession()) so that future reads and writes to that archive worked.
What exactly is going on with all of these handles? Why are there only some things that the one returned by
fsGetSessionHandle() can do? Is there any good documentation about what all of this is? 3dsbrew tries to explain it, but doesn't say what Archives actually are or represent.