The purpose is to give Bob proof that Al has enough coins to complete the transaction, and to be sure that he won't spend them.
You can have Bob provide a specific signed message confirming he has sufficient bitcoin to complete the transaction. This will not prevent Bob from spending said bitcoin.
The problem you describe is common for high value transactions. If you are selling anything on the internet, you should expect to deal with a lot of time wasters. You can keep an item listed for sale as long as you have not received payment for said item, and make it clear the item will remain listed for sale until the item is paid for.
It should be possible to allow for a type of n-lock time transaction whose outputs are only spendable after n-blocks after the transaction confirms. I don't see many use cases for this type of transaction, so I am not sure there would be consensus for this type of change.