Nothing in the headers jumps out at me. Maybe @matteo has used Google’s App Engine, or @cbrandt might see something in the headers that’s preventing caching.
Same as you… never used App Engine, but it’s not the server that creates a problem once you give out the headers.
Probably best would be to ask support directly. Maybe there is some header that Cloudflare strips or some setting in the dashboard that prevents caching.
You App Engine instance is sending a cache-control: public, max-age=0 header. That will prevent Cloudflare from caching it. You should be able to overwrite it in the dashboard (it will impact the whole website), but il will be way easier to do so in the server’s config.