I've often thought about this problem:
On the one hand, you want to provide perks that offset personal cost to your employees AND reduce the amount of time it takes for them to do something like lunch with the result in increased productivity (ostensibly simply due to removing factors such as travel-time-to-lunch-place).
The company store comes to mid, as well.
There are many great benefits that companies do provide: free commute costs (bus, bike and ferry service) as well as on-site food...
Perhaps a way to quash any misgivings about such services would be to provide a daily per diem for services as pay, where you get the per diem pay UNLESS you partake of the companies service instead.
So you badge into each service and thus get that per-diem pay redacted from your check.
If you use NONE of the company's services, then you get that same portion of pay back.
This also has its problems, though.
----
What I would far prefer, though, is tech services system that companies can buy into:
Want your employees to be able to bus from SF to MTN VIEW: pay in and let them badge into that service.
Why should all the tech giants run separate services that are basically all the same routes? Let a company run that, and let ANY company add users and pay based on badging.
Let companies have a "groupon" of sorts for restaurants in their area, where the per-diem lunch allowance is spendable at any restaurant within a radius of the office. The employee will get a % of their meal paid for by the company, and they pay for anything they personally want over the base?
Allow for perks that are not walled to the campus/office/etc.
Heck, Path.com employees had a monthly Uber allowance they could spend...
This should be encouraged in Silicon Valley, to allow startups to share services at a discount which both provides revenue, data, testing, users, validation, etc....