The difference is that parameters can be set by the calling code (using with-param in the case of a template parameter, or from the application API in the case of a global stylesheet parameter); variables can't. In other respects, parameters and variables are used/referenced in exactly the same way.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference