Because the ad ecosystem has two sides. I used to think my ISP could just magically support IPv6 and didn't need routing protocols or peering agreements, too. (They support it now)
Websites with ads need to satisfy the ad buyers. This means running a bunch of JavaScript that's adversarial to the website and fingerprints both the website and the browser to determine where and to whom the ad is actually shown. It's like a cloudflare bot challenge is happening behind the scenes. Of course all this stuff doesn't happen on the website's own domain, or the website could manipulate it.
And the ad that's originally delivered might not actually be the ad, but might be a script that fetches the real ad from a different server, if the incentives line up that way. Imagine you have a contract to advertise on a site, but someone else wants to advertise on the same site and pays you to forward their ad. Ad margins are razor thin, you'll do this for $0.00001 profit per impression. And your buyer might be doing the same thing to their customer. It's all a huge mess.
It's ironic how trust would solve the issue and ads would become impossible to remove. Trust comes at a huge premium of course.
Trust?
In ye old days, you had newspapers who sold ads, and had to at least satisfy their customers. What the newspaper advertised reflected on the newspaper, and where the advertiser advertised, reflected on the advertiser. Now we have a situation where no one is accountable. Spammy ad sites are a thing, because there isn't that direct relationship between advertiser and website.
I think that just goes to prove that content providers and ad providers could defeat ad blockers if they worked together. (And perhaps made the ads less offensive so people don't have motivation to block them.)