So why would Tomcat see classes in my jsf.deployer directory but not in the jars that I explicitly added to the classpath?
Since those are part of default CL domain aka big-ball-o-mud, shared by everyone.
And why does your Seam deployer work with Tomcat? What is it doing differently?
Dunno.
Could be that it adds that jar to non-web (sub)deployment,
as I think the attachment is optional, since it only cares about matching file (some Seam known file).
(it might add that multiple times, but the first one would win anyway, and not much is in seam-int.jar)