I don't understand why people expose files they expect to receive significant traffic on public buckets, instead of using a caching reverse proxy from somewhere with cheaper data transfer rates.
That's another point of failure. One of the use cases of cloud storage is serving static assets. "a developer could store and host media and other static assets for a web game in Google Cloud Storage". https://developers.google.com/storage/docs/faq#services
Due to their request pricing, serving static assets is significantly costlier than cloudfront since storage costs tend to be minimal
How does that help when your content is in Cloud Storage? Is there an app which serves content out of Cloud Storage and runs on app engine? (I haven't worked with app engine)
You can set caching headers on Cloud Storage also. But that doesn't help when
1. you have a large number of requests with cold cache
2. want the flexibility to keep cache time small. Unlike cloudfront there is no purge method in GCS. GCS doesn't guarantee to serve new versions until the old one's cache time has expired.