I don't like the 'default entry, especially if it is usually wrong for a library to set it.
Having no bindable var default makes editing data_readers.clj an outstanding chore for everyone.
It is unlikely a single special override in data_readers.clj is suitable for every reading situation, even in the same app.
If there is a known TaggedElement type, then people need only be able to opt out of that.
So if there were a default-tagged-reader function of (tag read-element) that built a TaggedElement (or, alternatively, threw, if people prefer), people could just rebind that in a particular reading context.
There's no perfect default, but in most situations getting unknown data is an error. I personally would default to that, and provide a read-tagged-element fn people could bind in when trying to implement read-anything.