xsl:apply-templates selects one or more nodes and tosses them into the air, saying "is anyone interested in these?". Around the playing field are lots of template rules, all waiting for nodes to be thrown into the air. When one of them sees a node that it fancies, it catches it and does the action called for, which will often involve selecting some further nodes and throwing them in the air, a process which carries on until the processing is complete.
The beauty of the mechanism lies in the loose coupling: the rule that throws a node in the air doesn't know who will catch it, and the rule that catches it doesn't know who threw it. This makes template rules highly reusable, and highly adaptable to documents with variable or unpredictable structure.
If xsl:apply-templates is written with no select attribute (a common case) then it selects all the children of the current node. If all the template rules do this, the effect is a recursive walk of the entire document tree, each node being processed by the best matching template rule.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference