This seems like a common problem in general.
Abstraction to a common interface is fine so if you don't care what the abstracted thing is you don't need to. Great. Read a basic file off spinning disk, ssd, cdrom, nfs - all the same, all good.
But if you do care you can't know what it really is because they've abstracted the underlying away with whatever layer(s) sit on top.
Should it be a question we need to consider when writing libraries, or any other abstraction, how does one penetrate your abstraction if they need to? Are you really, completely 100% sure they don't and shouldn't?
There's a kind of arrogance that we fall into making decisions for others when we design APIs, library interfaces, etc where we know what we're exposing and users don't know what's good for them. Maybe that's right sometimes, i don't know?
This sqlite paper casts some pretty strong doubt on that as an approach, imho.
What do you think? Have we all been missing something like this in api design?