Right, on top of adding the fields to the form, you also have to add the logic to handle the fields. There's A LOT of places where this needs to be done. What I do is just search the code for 'email' - which will find all the places the email field is
handled, and then duplicate that logic for the new fields.
Same goes for adding the fields to the membership request list/view. Just edit the schema. Find the email field and copy it for your new fields, just changing the names and generating new guid's.
For the event receiver, you just have to change GetMembershipRequest to additionally handle the new fields (Again, just searching for 'email', and adding the new logic in those locations).
For storing the additional fields, I usually just store them directly in the user's SharePoint profile (which is what the above code does) - so no need to store them in SQL.