Is it possible to limit which products users can purchase by role? I have three products, A B and C. Anyone can buy products A or B, but only users with the VIP role should be able to buy product C.

How can I make sure users don't see product C if they don't have the VIP role?  (It would be best if they could not buy it at all, but I will settle for a solution that simply hides it.)  My products are displayed in a view using a Product display content type.
You should create an additional "VIP ONLY" product display - a node type that aggregates products and effectively shows them in the front-end. 

With this new content type you could tap into its permission system using Content Access and limit the "View" permission to the "VIP user role".

When you want to create a VIP product simply create a new "VIP ONLY" node.

Steps:


Create a new node type in admin/structure/types . Call it "VIP ONLY".
Add a product reference field to the node. Use the existing field. It will now be listed in views that list product display types.
Setup the permissions as per above.
Profit.