I enabled Openid, and installed the OpenID selector module. When a user logs in via openid, they have to validate their email, and the way to do so is by drupal sending them a one-time login link to reset their password. Is there any other way to validate the email address? Sending a password reset link is confusing for users.
If you want your users to be able to setup their own password, check out LoginToboggan. It adds password fields on the front-end user registration page and optionally links non-verified accounts to a "temporary" role on the site, if you want to limit their behavior/actions until they confirm the email.
It also features a lot of other goodies and tweaks, which make the registration/login process much easier.
Another option is Email Verification, which checks if the domain or host of the email address exist, and tries to validate the account by sending
HELO/MAIL FROM/RCPT TO to the host's SMTP server.