73budden,
I've re-implemented your latest idea here:
https://github.com/capitaomorte/sly-named-readtables
It works and the mode-line indicator idea is a nice touch (there's a screenshot).
It's probably still a bit sketchy though: the readtables found by in (in-readtable ...) forms take precedence of others found in *readtable-alist* (i.e. in-readtable binds *buffer-readtable* tighter).
I would like to understand more about this conflict, before I implement some protection like you suggested, whereby (in-readtable ...) bindings would error out if they discovered there was already another binding coming form *readtable-alist*.
I'm still skeptical as Attila is as to how this would lead to unpredictable or suprising behaviour. Is it only that SLIME-specific kludge in NAMED-READTABLES itself or something deeper?
Another thing I don't fully understand in your idea (but I did reimplement it that way) is why the readtable information has to go on every Emacs->Lisp request, i.e., why not only on commands that eval lisp and compile parts of buffers? Is compile-file affected as well, should it be?
João