Wrap group of wp query posts to parent div by date/year

This cannot be done only by querying database. Firstly, you have to iterate through all items and create array of posts grouped by dates.

$args = array(
    'posts_per_page' => -1,
    'post_type' => 'event',
    'meta_key' => 'event_date',
    'orderby' => 'meta_value_num',
    'order' => 'ASC'
);

$wpquery = new WP_Query($args);
$posts = $wpquery->get_posts();
$ordered_posts = array();

foreach ($posts as $post) {
    $meta_value = get_post_meta($post->ID, 'event_date', true);
    if (!$meta_value) {
        continue;
    }
    $date = date('mY', strtotime($meta_value));
    $ordered_posts[$date][] = $post;
}

Next, you have to iterate through grouped array to display divs as you want:

foreach ($ordered_posts as $post_date => $posts) { ?>
    <div id="<?php echo $post_date; ?>">
        <?php foreach ($posts as $post): ?>
            <div class="post <?php echo $post_date; ?>">
                <?php echo $post->post_title; ?>
            </div>
        <?php endforeach; ?>
    </div>
<? }