Hi – great question!
There are a few ways you might go about this and I think filtering on pre_get_posts as Jonah suggested in the other thread you linked to would probably be the cleanest approach, particularly in terms of supporting pagination where a large number of results are returned.
It looks like the approach you are using is more template driven which is totally fine if it meets your needs and certainly is likely to be a fast and robust way to do things in many cases. With that in mind, perhaps you could add a condition to ignore results that expired before the current date and time?
if ( tribe_get_end_date( null, false, 'Y-m-d H:i:s' ) < date( 'Y-m-d H:i:s' ) ) continue;
Something like the above might work though probably needs some refinement.
Does that help at all?