I think you can do the trick running 2 loops, in the first you prepare an helper array of posts ordered by date, in the second you display this array:
Something like this (completely untested):
if ( $agenda_query_full->have_posts() ) {
$date_events = array(); // helper array
$today = date('Y-m-d');
while ( $agenda_query_full->have_posts() ) {
$agenda_query_full->the_post();
global $post;
$metas = get_post_custom();
// save event name in the post object
$post->ename = array_pop( $metas['evenement-name'] );
$meta_event_start = array_pop( $metas['evenement-datum-start'] );
$meta_event_end = array_pop( $metas['evenement-datum-end'] );
$dateRange = getDateRange( $meta_event_start, $meta_event_end );
asort($dateRange);
foreach ( $dateRange as $date ) {
if( $date < $today ) continue; // skip past events
if ( ! isset($date_events[$date]) ) $date_events[$date] = array();
$date_events[$date][] = $post; // put post in helper array that is keyed by date
}
}
if ( ! empty($date_events) ) {
foreach ( $date_events as $date => $events ) {
$datum = date( "d-m-Y", strtotime($date) );
echo '<h3>' . $datum . '</h3>';
echo '<ul>';
foreach ( $events as $event ) {
if( in_category( 'acties', $event ) ){
echo '<li><a href="' . get_page_link( $event->ID ) . '">' . $event->ename . '</a></li>';
} else {
echo '<li>' . $event->ename . '</li>';
};
}
echo '</ul>';
}
} else {
echo 'No events found.';
}
} else {
echo 'No events found.';
}
wp_reset_postdata();