I am not sure you understood my original suggestions.
The delay: "document_start" is not the problem, you want "document_start" if you want to be there before anything else happens. You introduce a delay when you inject a script with src set to a chrome extension URL. You might think there would be no delay because you're not loading a resource over the network, but no, there is a delay because the browser still needs to fetch something (your chrome extension resource) and while that fetching is happening, the page goes on loading.
If you actually need to inject a script tag into the page where you want your script to run before anything else on the page loads, you need to set the script's contents using the text attribute, not the src attribute. You probably also want to set the async attribute to false. I previously sent a link to an example from Privacy Badger.
But if you may not actually need to inject this script tag at all. You only need to pierce the isolated JS context you get by default in your content scripts if you want to interact with the page's JS environment. For example, you want to override the user agent property in the navigator object. You already have access to the DOM, you can already read/write to page DOM, create interactive elements, listen to clicks, etc. You just can't see/modify JS variables used by the page, and the page can't see your JS, which is a good thing.
I think you should make a simple extension just to practice and verify your approach. Don't complicate things right away with your project SDK and other big project-specific requirements. Make an extension that injects a before-anything-else-happens content script and listens for user clicks and passes that info back to the background page.