Personally, I would have both in some cases.
Have an autonumber, and use that to relate this table to other tables.
Than have your own specially designed unique reference value, and store this in your table, without it being used as a foreign key anywhere. That way your table links remain simple (numeric), and you can change your internal numbering system anytime you want. It might be easier to make your internal numbering multi-field, rather than single field - eg, year, contract, serial number. This way you don't have the pain (and it is a pain) of constructing multi field links between tables.
as Mark said above.