I think it boils down to the fact that the ads are delivered with the content. You can just choose to not look at the ads, right? This is the same principle that the ad blockers work on.
To get around that, Another way to do it is to deliver the ads first, have the browser attest the ads were played and then serve the content. The problem is the end user can always modify what you serve them. Getting the browser to attest to something like that is very hard if not impossible.
There's no good way to do it. The advertisers will always be playing a game of cat and mouse. They take what they can get, because that's all they can do.