Discussion in a email_registration module support thread at http://drupal.org/node/186128 led me to further examine all the issues associated with using Drupal for a Facebook-like authentication system.

Facebook only uses Email addresses for authentication and full names for user representation. In Drupal core, using full names as usernames is not an option because there are people with the same name and usernames need to be unique.

Here's a list of issues I have run into making drupal compatible with this sort of user system WITHOUT ALTERING CORE:

Full Names are not in the core user object
The easiest way to solve this is using profile.module to create a fullname field or a firstname and lastname field. A users email address represents a definite unique identifier for a user. While a person might have many email addresses, no email addresses have many owners (that would sign up for an account)
UI Forms that select user need unique usernames
UI forms like node authoring and others in contrib modules that select users by username (mostly autocompletes) depend on usernames being unique. Node referencing forms solve this problem by inserting node ID into the form input in the form of Node Title [nid:#]. So if you want to implement a module doing this be sure to use hook_form_alter to modify all of the user selection forms and also add validation that converts the [uid:#] into the expected value. Alternatively, one could modify the existing autocomplete functionality or create a new autocomplete that has different display and input values. For instance, the autocomplete dropdown would have small pictures of the users that match the typed text next to their names allowing a user to select which one he means. The input field would be populated by the non-unique fullname of the user but javascript would add the unique identifier of the user to a hidden field
Many database calls select name from the user database
Most of these can be fixed using overrides in your theme such as theme_username (which should be used in every representation of username and be fed a profile-enabled object). Again, the real problems are in the forms
Drupal authenticates against the name field
This is why the name field must be populated with the user's email address. Email logins are common and completely unqiue. This can be done with
  case 'validate':
        global $form_values;
        $form_values['name'] = $form_values['mail'];
        break;

in a module's hook_user function.

I don't want my user's emails to be visible to other users
This is why this is so complicated. Many automated emails and other applications do not use theme_username, and individual hacks need to be made up for each one. It is possible to put this line of code in the user hook:
 case 'load':
          $account->name = $account->profile_fullname;
  break;

But this can lead to errors in forms and other places that use unique usernames. Making these modifications is difficult and it is important that we list them in one place in case anyone wants to do this.

Anyone know of any better solutions? I would like to think it's easier than I'm making it out to be.