There are other things we can use to make our locks: extra keys, relative or fixed timelocks, & logic to combine them. The address encodes it all.
(Technically, they’re all actually scripts - the different functions used inside: OP_CheckSig, OP_Multisig, OP_CheckLocktimeVerify…)