Does OP_HASH160 consume the top stack element?
Yes, OP_HASH160 consumes the top stack element and replaces it with its hash.


  So how does P2SH work, if the script is consumed after HASH160 runs?


Here's how P2SH transactions are processed:


Execute the input script (from this transaction)
This is the transaction that only contains push-data-onto-stack commands.
AKA scriptSig
Execute the output script (from the previous transaction)
AKA scriptPubKey
Does the output script error out? If so, this transaction's invalid.
Does the output script end with a truthy value at the top of the stack? If not, this transaction's invalid.
Does this output script :


Start with OP_HASH160,
have 20 bytes of data,
and end with OP_EQUAL?  


If so, this is P2SH. (source)
If P2SH, erase the stack and run the input script again.
If P2SH, pop the top element of the stack off, and run it as a script. (source)
If that script errors out, then this transactions is invalid.