Disclaimer: I am pretty new to Elm so any ideas exploring here should not be too seriously -- these are merely thought experiments on how I prefer to build front ends, and my experience with React and TypeScript (and inexperience with Elm) may well be clouding my judgement on how to really do stuff in Elm.
I published a blog post around the ideas I am exploring here: Separating Your Front-End Concerns with Web Components.