My current thought on this is to use Web Components but with a very simple server-rendered approach. Ie, render the custom element and all the markup it needs on the server, and have some JavaScript that loads the definition of the custom element so that it becomes interactive once rendered in the browser. I am planning to create some server-rendered custom elements in this style for my framework.