You're right. Both tools have overlap in their use cases.
I enjoy service worker-based caching due to the level of control I get.
For example, I can configure everything in one place without touching my server, cache items from a different domain or assets I don't control, and configure prefetching in a single place. I've attached the @APItoolkitHQ service worker config file as an example.
Notice how I can specify a domain regex and the cache strategy to use. I mainly use CacheFirst, but there's NetworkFirst, StaleWhileRevalidate, etc.
Everything in the glob directory I defined would be precached immediately the page loads, so CSS, svgs, js, etc., would always be available.