I've seen an implementation DXA was set up to just be a JSON API. Vue.js was used as the templating framework.
XPM was dealt with by using .NET Core to render VueJS server-side (So XPM was accessing fully-rendered pages).
Webpack was used to bundle and transpile all the Vue.js code and helpers. The downside to this is that all of the state existed server-side.
If you were using Angular, you could do the same thing; there's a .NET core Angular renderer out there
One of the real advantages to a client-side MV* framework is being able to change state. So in this approach, you're really not able to appreciate that flexibility.
That's part of the reason we need something like DXA-JS. As Bart's pointed out, the DXA 2.0 Model service is coming. At the MVP retreat, we produced a POC of how it could work. I wrote a small introduction to DXA-JS explaining the vision a bit.
What our POC proved is that you don't need a framework, but, if you wanted to use one, any of these frameworks would be fine:
DXA-JS will (eventually) be an NPM library that can be bundled in via Webpack, or natively, and will act as your "state provider". Ideally, it'd give you the model information, routing information, and whatever else, that would allow you to seamlessly implement server-side and client-side renderings in the JS-Framework-du-Jour.