Show time ordered entries from midnight at end of loop
I -think- one of the neatest ways to go about this is to introduce a "Show as last in list" lightswitch-field.

I'm currently working on a similar project (festival line-up) where I also needed this; here's the approach I went with.

Basically, I'll be going for two fields: eventTime (date/time-field) and showAsLastInList (lightswitch-field)

{% set events = craft.entries.section('events').showAsLastInList('NOT 1').orderBy('eventTime ASC').all %}

{% for date, eventsByDate in events|group('eventTime|date("Y-m-d")') %}
    {% set additionalEvents = craft.entries.section('events').eventTime(date).showAsLastInList('1').orderBy('eventTime ASC').all %}
    &lt;div class="program__dateline" data-filter-dateline&gt;{{ date|date('l j. F')|capitalize }}&lt;/div&gt;
    {% for event in eventsByDate|merge(additionalEvents) %}
       {# PRINT YOUR HTML HERE #}
    {% endfor %}
{% endfor %}


It's not exactly pretty, but I can't really think of another way to achieve this without creating a custom plugin for it.