We wanted to switch between MapKit and GMS too. So we started out with: MapKit first because the MKAnnotations / MKAnnotationViews already 'allow for one level of indirection' more than the Google GMSMarker objects.
We THEN wrote a custom GoogleMapsMapView -- a UIView that HAS a GMSMapView as subview and mimics all of MKMapView and also calls the MKMapViewDelegate.
After we verified that the new GoogleMapsMapView components works and looks like a MKMapView, we made a new class (again :D) .. e.g. CommonMapview that - on alloc/init - gives you back the correct class for your OS.. either a MKMapView or a GoogleMapsMapView
the Clusting you mentioned is implemented in the CommonMapView and is completely unaware of the renderer