In XSLT 2.0 you group by using the xsl:for-each-group instruction. In XSLT 1.0 you have to do more complicated grouping via Muenchian grouping (search google, or look at the first post in this forum for more details).
Something like this does what you want:
Code:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes" method="text"/>
<xsl:template match="/">
<xsl:for-each-group select="//node[name='Product']/node" group-by="upper-case(substring(name,1,1))">
<xsl:value-of select="current-grouping-key()"/><xsl:text>
</xsl:text>
<xsl:for-each select="current-group()">
<xsl:sort select="substring(name,1,1)" case-order="lower-first"/>
<xsl:sort select="name"/>
<xsl:text> </xsl:text><xsl:value-of select="name"/><xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
As for point 3 - you don't give any indication from your example input and expected output what this actually means - there are no values for false in the visible-in-breadcrumbs attribute example input showing how they would be handled differently in the output, so I can't really help you with that bit without more information.
Sam