I don’t have direct experience doing this yet, but I have a future project in mind so have been doing some research and tinkering. There are a few options I’m aware of and JAMstack does look like where the puck is headed.
What you are probably looking for is the CraftQL plugin and something like GatsbyJS, there is an episode of the DevMode podcast that goes into detail about how something like this is architected.
Statamic is another option to look at, the unreleased v3 will have an abstracted data layer to let you hook it up to Craft, (also discussed on DevMode). If those don’t suite your needs there are many more static generators All you need is one that can consume an abstracted data layer, either a GrapQL endpoint or a REST endpoint, which you can create using the free first party element api plugin.