To provide an answer to both of your questions:
1) Yes this is the normal behaviour, in order to start editing an object you need to create it first so at that time an object is created in the database.
2) You can use basically need a schedueled event each night that cleans out your orders that have certain required fields not filled. If you have no required fields than you use a boolean as Roberto suggested. Set this boolean at the end of your registration process so that you can determine if it is complete.
In addition to checking the required field/boolean i would suggest to also check the creation date as you do not want to clean out empty objects in your schedueled event that are only just created as someone might still be using that object.
I use the IsNew() function to check if an object is new (= not committed). Does that help?