It would really help if you could learn the correct terminology (using the wrong terminology suggests that you haven't grasped the basic concepts). When you talk about "omitting the run tag", I strongly suspect that you mean "omitting the run element". Remember that an element has two tags, a start tag and an end tag. I suspect you want to omit the content between the tags (that is, the children of the element node) as well as the tags themselves.
Your code
<xsl:for-each select="catalog/cd/title[@def='2']">
<xsl:value-of select="."/>
</xsl:for-each>
will output the string value of the element - that is, its contained text - without any tags. That's what you asked for, but I suspect it's not what you want.
I'm not really sure what you do want, but if you only want the content of title elements that do not have a run child element, it would be
<xsl:for-each select="catalog/cd/title[@def='2'][not(run)]">
<xsl:value-of select="."/>
</xsl:for-each>
Michael Kay
http://www.saxonica.com/
Author, XSLT 2.0 and XPath 2.0 Programmer's Reference