Why isn't there a way for devices to indicate to a server if they are on a slow or data-capped connection?
There is. I'll update this post if I remember what it is, but I believe there's a spec and Chrome Canary is supporting it. It uses an HTTP header.