Each location service has a .inc file that developers can drop in, similar to the way FeedAPI Mapper (and Embedded Media Field) works. Or it could be an API module, with each service being its own module (meaning each service's integration module can have its own maintainer).

In their profile, people authenticate either through OAuth or username/password, tying their external service account to their Drupal profile.

User only gets to choose one? Or rank them?

On cron, the Drupal module goes through each user profile that has something chosen as their location provider then updates their user profile location field.

Views enabled: you would be able to get a Google Map of the current location of all the site's users.