This style of batched fetching is only used by streaming datasets, right? I’d need to roll my own wrapper to do the same on-the-fly chunking on a local dataset loaded from disk?

Yes indeed, though you can stream the data from your disk as well if you want.
A dataset in non streaming mode needs to have a fixed number of samples known in advance as well as a mapping index <-> sample. That’s why chunking on-the-fly is not allowed for non-streaming mode.

And I know it’s not your area, but as far as you know, there’s no way to add/change a dataset’s map functions inside the HF Trainer’s train process, is there?

Indeed there’s no such mechanism afaik, I think you would have to subclass the trainer and implement this logic yourself.