Site definitions are created by doing custom development, usually first copying an OOB template.
Site templates are created by saving a site as a template in the GUI.
There are advantages/limitations of each:
- Site definitions have to be updated by a developer or administrator with some XSLT or CAML knowledge
- Site templates can be created easily
- If you update a site template (e.g. change the column type) none of the lists based on it will update – whereas for site definitions they will. Only certain aspects based on site definition – will update – e.g. add/changing/removing views will not