The point about a traditional debugger is that it has no connection with the real world, switches, lights, spi peripherals etc. etc. Having said that you can use Proteus as a single step ot breakpoint debugger.

Yes you can write stubs to test programmes interaction with hardware but how do you test the stub.

The point about something like Proteus is that in theory potential errors are reduced because each stage relys upon the previous one rather than a series of steps in a project each independent from each other. Weather thats worth the price can only be decided person who pays.