I've built gajillions of these over the years (to where I finally abstracted the whole process to minimize what I had to write each time). Anyway, I learned two things:
a) make the first* step the definition of the user's account and password
b) store everything to the database as you go
* "First step" -- there's some legitimate gripes for making the very first step of a signup process require a name & password. Depending on how it is done, it can seem overly agressive. So, by all means take into account your application and your audience and use a warm up page, but generally, don't bother to start collecting loads of data until your user has committed to at least providing info to create an account. I generally ask for just the Name & Password and almost nothing else. If you need address & contact info, collect that later. That's the part that makes most people stop & think when it's the very first thing you ask for, so wait until they're further along the commitment process.
Doing this allows your user to bail and come back later without losing anything.
It also enables your application to start storing to the database right away which is much easier to work with. You can send a welcome email right away with info on how to finish the process, and you can send a reminder or two if the signup is incomplete.
It also gives you valuable data to see where in the signup process that people stop. Then you can start to ask "why do 40% of people stop and never come back after I ask for their height & weight?"
So, how do you delete abandoned signups? Well, first, you need determine the criteria for abandoned. A user might legitimately come back two weeks later to finish after an interruption. You'll know those guidelines for your own application. You might want to allow yourself many weeks before you delete records so you can see if there's a window of time that people do come back. You mighht find that waiting 3 weeks catached 67% of abandoned users, but 6 weeks only 72%. So don't be in a hurry to erase incomplete signups because it's 4 hours old or something. There's a lot to be learned from incomplete data.