Great post!
Here’s another thread that also talks about using opaque types to improve compilation speed: Improving Compilation time: Insights from Elm Compiler Internals
I talked to someone at Elm Camp 2025, who said that in a project they work on, they have this convention of having Types.elm files which expose everything, which makes the problem worse since basically all record types are exposed then (and end up in .elmi files). And changing a Types.elm file causes a lot of unrelated files to need re-checking. So that could potentially be something to look into, too.