Minor changes. Add some comments and rewind the command buffer when done.
Make JnaCardTerminals (not JnaTerminalFactorySpi) the owner of SCardContext.

Perform SCardEstablishContext in TerminalFactory.terminals() instead of the JnaTerminalFactorySpi constructor (called by TerminalFactory.getInstance). This will make it easier for the user to re-establish context when the daemon is restarted.

Also, throw EstablishContextException(JnaPCSCException) instead of IllegalStateException(JnaPCSCException), so that it is more catchable.
Add references JnaCard -> JnaCardTerminal -> JnaCardTerminals.

Make each of the objects created by JnaCardTerminals hold a reference back to it, so that it won’t be finalized before the things that it creates.