But strtotime *already* parses the timezone part of ISO8601 dates. Your problem is that strftime then formats the time using your local timezone. You want to use gmdate instead:

echo gmdate('c', strtotime("2016-11-05T16:00:00-0400"));

This actually formats the date with +00:00 for GMT, but if you were desperate to have Z instead of +00:00 (both are valid ISO8601) then just use a more complete format argument to gmdate:

echo gmdate('Ymd\THis\Z', strtotime("2016-11-05T16:00:00-0400"));

Peter