If the majority of incoming requests are not first-time visitors, then client-side templating is faster in most cases because they can benefit from all the client-side cache mechanisms. I was really impressed by the results of Offline-first approach applied to one of my professional projects.
You don't need a virtual DOM to re-render everything when state changes. We did not wait for React nor Angular to write change detection algorithms. Virtual DOM is one of the techniques of data-binding, and presumed the best performing. A few milliseconds saved at rendering, tenths of a second lost at initial loading. Is it really worth it ?
Both React and Web Components are overrated in my opinion. React is 127KB, Web Components polyfill is 105KB. This is a huge overhead for clients just to solve problems that can be dealt with build tools on the developper side. I have seen many benchmarks on DOM manipulation here, but never heard a client complaining "Oh, this DOM is slow". The number one problem in web performance has always been network latency.
Just because riot is well suited for a TodoMVC example does not make it a framework. It is minimalistic, it does not enforce a code style and it does not really offer much features. That does not make it less interesting