The Bitcoin wiki describes a transaction's script as something that describes "how the next person wanting to spend the Bitcoins being transferred can gain access to them".

The script for "a typical Bitcoin transfer to destination Bitcoin address D" is described as requiring of the future spender:

a public key that, when hashed, yields destination address D embedded in the script, and a signature to show evidence of the private key corresponding to the public key just provided.

What useful alternative scripts could be made? What practical situations would they serve, and what client features would be required to support them?