Using the Google Calendar API, and for a weekly recurring event on every Friday that never ends, I have cancelled one of the instances and modified the starting time for another instance several weeks later. On fetching this event from the calendar, it does not contain any EXDATE as specified on http://www.ietf.org/rfc/rfc2445, referenced by https://developers.google.com/google-apps/calendar/concepts
Why not? How does Google handle the modification of instances within a recurring rule? In fact, I only ever see RRULE in the recurrence field of the response. When do the other types of recurrence types appear such as EXDATE, EXRULE, RDATE, etc..?
You will get an instance of a recurring event with status=CANCELLED instead of an EXDATE if you cancel the instance through the Calendar API. EXDATEs however are an alternative that results in the same effect of the event being deleted. EXRULEs are now deprecated as per RFC 5545 (https://www.rfc-editor.org/rfc/rfc5545), RDATEs should work.