mythusmage: Bear with me for a moment.
Using widgets in a template has two basic parts to it:
-In the functions.php, the "sidebars" are created using the register_sidebars() call. This essentially creates the places where the widgets are allowed to be. The drag and drop spaces on the widgets config page is the main visible result of this functionality.
-In the rest of the template itself, wherever these widgets should actually be run/displayed, a call is made to the dynamic_sidebar() function. This actually pulls the data about what widgets should be in that sidebar and runs and displays them. It does this, usually, as an unordered list, however you can make that work however you like in the original register_sidebar() parameters.
Ignore the "sidebar" name for a moment and realize what it's doing. It's a) creating places for you to drag and drop the widgets and b) displaying them when the relevant parts of the template are displayed.
So if you want widgets in, say, the header, then you:
-Create a new "sidebar" for it in functions.php with register_sidebar, and
-Make a call to dynamic_sidebar in your header.php (or whatever your header's name is).
Just that easy, really. Example code:
Top of functions.php:
if ( function_exists('register_sidebars') )
{
register_sidebar(array('name'=>'Sidebar'));
register_sidebar(array(
'name'=>'Header',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => "</div>n",
'before_title' => '<h2 class="widgettitle">',
'after_title' => "</h2>n");
}
In your sidebar.php, it's basically the same as normal, like this:
<ul>
<?php if ( function_exists('dynamic_sidebar') && dynamic_sidebar("Sidebar") ); ?>
</ul>
And your header.php would have something in it like this:
<?php if ( function_exists('dynamic_sidebar') && dynamic_sidebar("Header") ); ?>
You'd have to mess with the CSS to get the widgets to live side by side instead of top to bottom, and you might need to change the before and after stuff in the functions.php above to make that work properly, but there's no built in limitation as to *where* the widgets live on the page. The register_sidebar doesn't create a "sidebar", it creates a dynamic chunk of widgets which get placed wherever the call to dynamic_sidebar is. That's how you could put them in the header/footer/whatever.
I do think this would be a bit pointless though, because most things you put in the header/footer are not the types of things that cause something to display. The field of things you need to put there is limited.
I disagree with ladydelaluna above though. I've been a programmer for 22 years now, and I like the widget concept. It's not really hand holding, except in the most simplistic sense. What it really is doing is taking the code out of the templates (where it can be lost by simply changing templates) and putting it into the database or plugins. If I'm using widgets and I change my template, my sidebars come right along with me into my new template. I don't have to re-edit my new template. If I upgrade my template to a newer version, all my hacks are normally lost. Not anymore, not if I'm able to keep them in widgets.
I think that eliminating the need for template hacking is a good goal, in the long run. Template changes are easily lost and such. Ideally, you wouldn't need to hack the templates, you'd have your changes in separate places in a way that would apply to any template. Widgets are a sort of first stab at that by divorcing the sidebar content from the template itself.