Hi Trevor -
It's definitely possible to do that but I don't see a way to do it unless you create a domain map.
Domain maps are really implementations of different array types. We talk about two kinds of domain maps - layouts and distributions. A layout is describing how an array is implemented within a locale (aka compute node). A distribution describes how an array is implemented across many locales. So Block is a distribution but if you are talking about having an array that wraps some mmap'd region then I'd say you're talking about a layout.
Now, the Block distribution is implemented as a bunch of local arrays. Each of these arrays has a layout - it's normally the default layout but Block has some support for specifying the layout for sparse arrays specifically (see the sparseLayoutType initializer argument). So, you could create a layout and then seek to make adjustments to Block to allow it to use your layout.
Alternatively, you could create a domain map that handles the distribution as well as your mmap issue. That would more or less amount to making something similar to Block. (I wouldn't favor this approach for that reason).
Anyway, maybe others will have a better idea, but my advice would be to try to create a domain map that is a layout for your mmap'd arrays and then to try to get Block to use it. Here I think one of the main challenges is that the domain map standard interface ("dsi") is neither stable or well documented. We do have this dsi documentation and you can learn a lot by looking at the source code for other layouts and distributions.