Apps can be written to refuse to run if they can't fetch their ads. This can be baked into compiled code.
Apps can be written to download and cache ads periodically as part of their "update" process, and display these ads even when you don't have an internet connection.
If they are not able to update these ads for some time (say 60 days), they can then refuse to run: "the application has expired and needs an update; please connect to the Internet". New ads are fetched when the user connects and lets the app update.
The point is that you may have a really good app that users want/need, and which presents ads, but in some unobtrusive way that users don't mind.
If you don't put in "anti-ad-circumvention" methods, then the ads will fall victim to some simple blanket blocking scheme that users set up before they even installed your app, not targetting your app specifically.
Analogy: a website with great content and very unobtrusive ads has them filtered by AdBlock anyway.
Currently the people who block in-app ads are people who have taken the effort to root / jailbreak their device. I find it hard to believe that they would put up with the ads.
Most ads use the same third party DNS services which makes blocking even easier.