How to tell when the stepper motor is done stepping?
I don't think you can know that.  From the datasheets that I've read on stepper drivers, they always (micro)step on every pulse from your software.  There's also a direction pin: high = one direction and low = the other direction.  That's about all that your software gets to worry about, as far as the driver chip is concerned.  After that logic is done, then the driver chip does whatever voltage/current limiting needs to be done and may or may not tell you anything.

So basically, you get to know your application well enough that you can give it enough juice but not too much (adjustability is good here) and that you never pulse it faster than it can keep up with, and then you assume that it's always in the correct position.  If you've satisfied the first part of that statement and it's not jammed, then the second part is generally true too.

You can also add encoders, switches, or other sensors to help you know where it is instead of assuming.  If you care about absolute positioning, you might want at least one "home" switch that you can find on startup and then navigate from there.  If you want limited travel, then you might want a limit switch at either end that can also function as home switches.  Write your software to never overrun the limit switches.  :)