OPT heavily relies on PouchDB for client side storage management. PouchDB is the wrapper that provides consistent API across different underlying actual storage implementations. The actual storage to use is controlled by adapters to use. By default, PouchDB uses indexedDB to store data. OPT provides a way for consumer to configure what storage to use by allowing developers to provider adapter to be plugged in.
At high level, PouchDB is a NoSQL DB, it only has stores. Databases in CouchDB/PouchDB are more like tables than databases in an RDBMS. Whenever OPT creates a PouchDB store, the adapter interacts with SQLite by creating a SQLite database, this is something OPT cannot control, but there are some plugins available (https://github.com/pouchdb-community/relational-pouch ) to make the PouchDB more relational. On the other hand, client side storage should not be a replacement for server side storage. Do you have more specific details on why you need to do joins and complicated queries on client side?