The specifics are theme dependent, but the calendar widget simply opens a daily archive. The way the output is managed is with the archive.php template. This would affect all archive output though, you could use is_day() if this arrangement should only be for daily archives.
It's also possible to extend the widget so it links to a completely custom template only for calendar listings, leaving all other archives as they are.
Regardless, you would need the template to either: 1) Alter the query to groupby category, and the loop detects a change in category to know when to output a new category sub-header.
or 2) Loop through each category and query for that day and category each time. So if you had 5 categories, you would do 5 different queries.