Is there a clean way of doing so? I would prefer doing that in functions.php using some action and/ or filter hooks. The 2nd-best option would be using some good plugin out there. (I haven't seen 1 suitable though)
I can always generate random and unique strings to be usernames in the registration forms and just hide it with CSS. I would imagine meddling with wp-login.php but that would be so ugly.
I am able to let users log in using email address and password, but not username now, partly referencing this. However, username still appears as a required field on the registration page which confuses people.
I've found that Register Plus Redux handles the login using email address instead of username well. However, I need to be able to modify the labels and texts on the registration page too (I need to put in Thai). It looks like there's no clean way but one will have to edit the codes in the plugins directly