I managed to get help on the SOAP :: Lite mailing list. If I want to pass my own headers, I have to use a call method instead of a method name.
my $authHeader = SOAP::Header->name("xsd:authHeader" =>
\SOAP::Header->value(
SOAP::Header->name('xsd:user')->value($s7user)->type(''),
SOAP::Header->name('xsd:password')->value($s7pass)->type(''),
SOAP::Header->name('xsd:appName')->value('TestApp')->type(''),
SOAP::Header->name('xsd:appVersion')->value('0.03')->type('')
));
my $params = SOAP::Data->name('ns:email')->value($s7user)->type('');
$soap->call('checkLogin', $params, $authHeader);
To use the call method, you will need to define a proxy (endpoint) on your soap object. Hope this helps someone else along the way.