Honestly this is a good option. You just need some conditional logic to hide the events once the start or end date has passed.
If you want the responsive calendar front-end bit without hand-coding it, I wrote Pie Calendar for just that kind of use-case. It’s bare bones, simple, and the free version is pretty robust. We have hooks for pointing the start/end dates at ACF fields too, if you want to do it that way.
But if I didn’t need the front-end calendar, I think I’d go the ACF/CPT route. Ticketing might be tricky, but if you integrate with Woo/EDD or even just have your events link out to Eventbrite for ticketing it should work pretty well.