One nit to pick: C isn't faster than Perl because Perl is written in C. It's faster because it isn't doing much behind the scenes compared to what Perl is doing. Once you layer in a significant portion of what Perl would be doing, a C program would begin to perform similar to Perl, or worse since its code hasn't undergone the years of scrutiny Perl has.
One reason that XS is useful is that it allows the programmer to decide what things that Perl would normally do are unnecessary in a particular xsub, thus only paying for what is needed and used.