device.destroy() unmaps all buffers. However, you can still call device.createBuffer(), and if mappedAtCreation is true, that's supposed to return a buffer (unless it runs out of memory).
This doesn't make very much sense because it means that destroying the device a second time can still have effects (destroy is not idempotent): it unmaps any mappedAtCreation buffers that were created after the first destroy. We already don't allow mapAsync to work on a lost or destroyed device (though we do require mappedAtCreation to work on a lost, non-destroyed device).
I tried testing what the spec says; currently, browser behavior is unsurprisingly inconsistent - though chromium (somehow) passes them.