There is no need to use a callback function, a single regular expression can do it.
(?<=.).(?=.*@)
(?<=.), make sure there is at least one character before so it won't replace the first character.
., match any character.
(?=.*@), make sure there is a @ somewhere after the character.
Example with function changed to preg_replace with unicode modifier (as suggested):
echo preg_replace('/(?<=.).(?=.*@)/u','*','漢aelena@tratata.com');
Outputs:
漢******@tratata.com