With a stateful iterator, you might need to worry about your cached pointers being invalidated by mutations from other callers.
Am I missing some clever trick?
There are ways to avoid locks, but the stdlib implemtation doesn't do it. There are probably a bunch of crates that implemented concurrent BTrees, though.