How do you force a sidebar widget to have a container div around all child widgets?

Sidebar functionality doesn’t handle wrapping container, you need to add that on template level. Here is example markup of sidebar-primary.php template (taken from Hybrid theme and simplified a bit):

if ( is_active_sidebar( 'primary' ) ) : ?>

    <div id="primary" class="sidebar aside">

        <?php dynamic_sidebar( 'primary' ); ?>

    </div><!-- #primary .aside -->

<?php endif; ?>

Also I highly recommend Justin’s Sidebars in WordPress tutorial.