We actually fixed that failure mode three years ago with the release of Firefox Sync 1.5. The encryption key can now be re-derived from your password, so you can always recover your data as long as you remember your password. Even if you lose all of your devices.
We do :) The full details are at https://github.com/mozilla/fxa-auth-server/wiki/onepw-protoc..., but basically we derive two separate keys: one for authentication, that gets sent over the wire, and a completely different one for decrypting the sync key, which is not set over the wire. This means that even if you can observe the entire transaction, you still aren't able to derive the decryption key.
It's more or less:
let quickStretchPW = PBKDF2(email, password)
let authPW = HKDF('authPW', quickStretchPW)
let unwrapBkey = HKDF('unwrapBkey', quickStretchPW)