How can I allow users to opt out of receiving e-mails with one-time login links?
What I would do is define your own token.

Start off with copying login_one_time_token_info() and login_one_time_tokens() into a custom module, change the hook names and rename the token to something like login-one-time-optional or whatever you prefer :)

Then, change the implementation of the hook_tokens() implementation so that you check the field on the $account and use either the existing function or url('user/login', array('absolute' =&gt; TRUE)). Keep in mind that existing users users might not have any data saved in that field, so add a default value, you might want to put something like this in a helper function:

if ($items = field_get_items('user', $account, 'your_settings_field')) {
  return (bool) $items[0]['value'];
}
else {
  // Default to use the one time login link.
  return TRUE;
}