XSLT create list from paragraphs

With XSLT 1.0, sibling recursion is the way to go, and you're on the right lines. Not tested, but something like this:

<xsl:template match="p[@class='NL1']" mode="normal">
  <ol>
    <xsl:call-template name="makeLi"/>
    <xsl:apply-templates select="following-sibling::p[1]" mode="list"/>
  </ol>
</xsl:template>

<xsl:template match="p[@class='NL']" mode="list">
  <xsl:call-template name="makeLi"/>
  <xsl:apply-templates select="following-sibling::p[1]" mode="list"/>
</xsl:template>

<xsl:template match="p[@class='NLL']" mode="list">
  <xsl:call-template name="makeLi"/>
</xsl:template>

<xsl:template match="p[@class='NL' or @class='NLL']" mode="normal"/>

I added mode="normal" for the default processing mode just for emphasis, you should leave it out if using the default (unnamed) mode.