The furthest I've come so far:
1. Ask user for the backup location using showSaveFilePicker.
2. Save the file handle in IndexedDB.
3. Every 24 hours, open an extension page that retrieves the file handle.
4. Call fileHandle.createWritable().
5. The user prompt is shown again, so we can't back up anything in the background :(
(I could require one tab to be open at all times, but that's unacceptably bad UX.)