The problem with an async hairball like this is precisely that it's so hard to prove safe. For example, this comparator has slow, ballpark 5 us, rise and fall times, and it drives three different chips, so you can't be sure when stuff happens. U12 will go metastable now and then. The width of the PE inputs to the counters isn't clearly defined, so the counter loads could be unreliable. There are just too many potential hazards. Things like this might fail one time in a hundred, or one time in a billion.
This could mostly be fixed by synchronizing the comparator output to the clock in one place, and using only the synchronized signal for subsequent processing.