Well, as with all things computing, the game is “abstraction”.
If you can come up with an adequate layer that works on both a SQL store and a key/value store, then, ideally you’re isolated from the problem and can support the appropriate implementation on the particular browser. If your data model and access patterns don’t fit with the lowest common denominator (i.e. a k/v store), then that pretty much solves your problem right there.
If you can use either store, then work on a decent access layer and approach the problem from that direction.
Mind, just because you have a k/v store on the back end doesn’t mean you have to model your data as only a k/v model. Essentially all a DB is on the backend is a k/v store. If you don’t have an insane amount of data, you can do many things. With a large amount of data the hoops you might have to jump through may cost you in performance that you may well not see with a smaller amount of data. All depends.