Eu prefiro separar por dois motivos. Primeiro porque no UpdateUser só te interessa a parte de clean. Depois porque como tu disseste no futuro podes querer mudar a parte de sugerir para usar tambem universidade ou assim. O nome deste objeto devia ser GenerateAndCleanUsername para ser preciso, e aí dava para ve de longe o quebrar do single responsability pricinciple.