I’m afraid I have to disagree, at least with respect to Uber and Lyft. Both companies now have a very simple defense against the type of prank Uber pulled: they charge cancellation fees. IIRC, each company gives a prospective consumer who’s hailed a car a short window of time to cancel (under five minutes), but after that charges them a sliding fee based on both the city and service offering. For a typical UberX or Lyft ride, the fees are usually in the $4-$6 range; they rise proportionally for both companies’ higher-end offerings.
While yes, they risk the danger of alienating bona fide passengers by charging such fees, they may not want said passengers as customers in the first place if they have a propensity to be “flaky” in such a fashion. The flip side — aside from deterring juvenile stunts like Uber’s — is creating a disincentive for a passenger to cancel a car that’s en route if, for instance, they discover Lyft’s surge charge is much lower than Uber’s at a given time.