There is no rush to migrate to MV3 in Firefox store, so reverting back to MV2 is totally OK.
MV2 in Firefox supports many of the modern MV3 API, so your codebase doesn’t have to change much (or at all).
Alternatively, you can keep your background script running by forcing it to perform some “action” every <30 seconds.
For example using this:
self.setInterval(() => browser.runtime.getPlatformInfo(), 2e4);
However, browser can still kill your background script in some special cases (when PC wakes up from sleep, or on Android I think due to OS limitations…).
But I wonder, why is your background script not woken up when it receives a message from the reader? Are you registering the message handler in the top-level background script code?