Everything you're saying is backwards. You're probably a crazy person who would drop a mural on my face.
Users don't have an economic incentive to game the system. Users have a desire to get from point a to point b. There's no incentive to cancel. People don't do that. Cancelling your ride is the worst thing a user can do because it fails to get them from point a to point b. But when drivers don't show up or take the long way around and subvert the timing system, or their phones die or blow up, you can't just assume a bad user and start charging people. That's stupid and wrong, just like you are.
It's a cash grab, and that's all there is to it. It's Uber failing to solve a problem.
The cancellation fee is all about getting money from people who fuck up the ride in one way or another. Dead phones, drunk mistakes, whatever. It's Uber taking advantage of the people who are likely to need them the most. I don't have access to Uber's internal data, but I bet you serious money that people who do know that this is true.
In the case of a 97% vs. 3% battery, the call should be exactly as it is currently. Who is going to be the more lucrative for the driver. You just don't cancel on the 3% rider after agreeing to pick him/her up. The driver should actually show up at the place agreed upon.
The fact that this is an issue really points out how bad Uber can be. And it argues in favor of some regulation that Uber isn't subject to at the moment.
If you think this is a hard problem to solve, I would invite you to my world. We actually solve hard problems where I work.