general purpose indexes
I've come to define a general purpose index as an ordered set of records with optionally unique composite keys. The Common Lisp implementation described here uses functions to specify keys. Since indexes delegate actual indexing to ordered sets, they support the same features out of the box.
The other reason many projects develop an SQL dependency is transaction support. As data and access patterns become more complex, manual coordination quickly looses it's appeal. Transaction support may sound daunting, but we're not aiming for the clouds. Assuming single threaded use; automatically tracking added and removed items, and performing opposite operations on rollback; is trivial to implement and frees mental resources for more interesting tasks.
A final example before we wrap up, this one shows how the API supports non unique use:
A full implementation of these ideas and more may be found here.