Is that not what anki does? You have a collection of cards, each card can be in one or more decks derived from the cards.
> There also ought to be a way to constrain what cards should be studied in a given session
That's also decks. You can have your 'Japanese' deck, and then the 'Japanese::writing' subdeck for the subset which require you to have your writing materials handy.
You can also use "Better Tags" to tag cards, and then create a sub-deck with an ad-hoc tag query to only study a subset if you want.
Does creating more decks and then studying the subset you want to in a session not work for what you want?
> Anki doesn’t seem to separate these layers at all. Everything is a monolithic database.
Decks are separate files which can be shared, edited, created, studied, and reasoned about independently.
The "spaced repetition model" in anki is obviously separate from the fact that there are multiple (FSRS and the old one).
> Export is unpleasant. Sharing is unpleasant
It's just files (zip files really). What's unpleasant about it?
> And, every time I try Anki, I get stuck when I can’t manipulate my own data outside Anki.
There's libraries to manipulate anki decks outside of anki for practically every programming languages. There are literally dozens of tools that can generate and import anki cards, such as the large family of japanese "mining" tools which create anki cards from media, dictionary entries, etc etc.
It's open source, and the code has clean library abstractions you can work with, so it's trivial to nab any of the data out of it.
> Is there any system out there that doesn’t have this issue?
Every issue you described is something that I experienced in other software, but which anki solved for me, so for me "anki" is that system.