The community nickname is a required field on the user object. It is used in Ideas, Answers, Articles (Knowledge) and a few other places.
According to the official documentation:
Community Nickname Name used to identify this user in a community. Up to 40 alphanumeric characters are allowed; standard users can edit
Since you are building a Force.com Site and have complete control over the Visualforce markup and Apex code, you can decide not to display the community nickname to your users. However, to save the user record you will need a community nickname.
As some of the other answers have alluded to, you can generate your own community nickname behind the scenes.
In your example above, you might want to use the combination of first name and last name (although there are several other possibilities you could use).
u.FirstName = firstName;
u.LastName = lastName;
u.Username = email;
u.Email = email;
u.CommunityNickname = firstName + lastName;