No mention of dask? So far I haven't really had a need for larger-than-memory arrays, but dask would be my go-to choice.
And for that Dask supports Zarr, and HDF5, and pre-existing arrays (where mmap() comes in), and a few other formats: https://docs.dask.org/en/latest/array-creation.html#