My advice would be to split the username field into 2 fields (in the templates), naming them appropriately like username_firstname, username_lastname - then in the initial registration hook for processing the submission, do your processing on the fields, then set $vbulletin->GPC['
username'] to the processed result. (so it appears to have come from user input, but is processed)
I do this for thread titles, relying on other inputs (other fields), i then set the $vbulletin->GPC['subject'] to the title i want, overriding what they wrote in the title field (if need be)
I hope i made sense