"init "and "mail" fields in the users table
The difference is that mail is the actual email address used by the user, while init contains, in a plain Drupal installation, the email address used when the user account was created.
In the case the Bakery Single Sign-On System module is installed in a slave site (in Bakery parlance), the init field contains the link to the user account on the master site.  

So, the init field could be described as the field that unequivocally identifies a user account, and that is (by default, when third-party modules don't change its content) set to contain the initial e-mail address. (That seems the reason why the field has been named init.) 

Drupal.org uses the init field in the case users lose the access to their account, and create a new account to report that. They are asked (not publicly) which email they used when registering their previous account; a Drupal.org administrator would then verify that is exactly the email they used while registering the lost account by reading the database content. (There isn't a module that allows to do so automatically, for what I know.)