For most XSLT transformations, and especially when handling an input structure that's recursive, you should use the standard recursive-descent design pattern where you write a template rule for matching each element, and it uses apply-templates to process its children.
<xsl:template match="//ol">
<xsl:call-template name="list"/>
</xsl:template>
The "//" at the start of the match pattern achieves nothing. Use match="ol". (The only difference is the priority of the rules if there are conflicts).
In your example the call-template achieves nothing, you could move the body of the called template inline.
<xsl:apply-templates select="li"/>
This says "process the li children". But your example also has "ol" children, and you aren't processing these. That's why they aren't being processed. Use <xsl:apply-templates/> to process all the children.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference