Hey Karlo,
I totally get why that's happening—caching issues with URL changes are honestly the worst. It’s pretty common because Kentico doesn’t always treat URL path fragments as a standard document update, so those DocumentEvents might just miss them entirely.
Have you tried Juraj’s idea about the cms.pageurlpath object yet? Setting up an event handler like ObjectEvents.Update.After for that specific type usually does the trick when a slug gets changed.
One small thing you could try: use the e.ObjectBefore property in your code. It lets you snag the "old" URL right before it's gone, which is perfect for telling Cloudflare exactly which cache needs clearing.
Hope that clears things up for you!