While waiting for someone more knowledgeable to reply, I had a bit of a look at the code. I can get pretty much what I want by modifying rst2latex.py to use a different reader:
__docformat__ = 'reStructuredText'
from docutils import readers, nodes
from docutils.transforms import Transform
from docutils.readers import standalone
return super().get_transforms() + [BibleReferences]
return text == 'john 3:16' # stub
default_priority = 840
for ref in self.document.traverse(nodes.reference):
if ref.hasattr('refname') and is_bible_ref(ref['refname']):
ref['refuri'] = link_for_bible_ref(ref['refname'])
If I'm on the right track, it would be nice to know. If there's a better way, that would also be nice to know.