Wrapping an anchor around blocks is acceptable in HTML5, not in previous versions like HTML 4/XHTML.
In HTML5 we have:
The a element may be wrapped around entire paragraphs, lists, tables,
and so forth, even entire sections, so long as there is no interactive
content within (e.g. buttons or other links).
-> https://www.w3.org/TR/html5/text-level-semantics.html#the-a-element
e.g.:
<aside class="advertising">
<h1>Advertising</h1>
<a href="http://ad.example.com/?adid=1929&pubid=1422">
<section>
<h1>Mellblomatic 9000!</h1>
<p>Turn all your widgets into mellbloms!</p>
<p>Only $9.99 plus shipping and handling.</p>
</section>
</a>
<a href="http://ad.example.com/?adid=375&pubid=1422">
<section>
<h1>The Mellblom Browser</h1>
<p>Web browsing at the speed of light.</p>
<p>No other browser goes faster!</p>
</section>
</a>
</aside>
So yes, it is valid HTML and safe to use it if you use HTML5, it won't be safe if you want to make it compatible with other versions of HTML.
Update
Is this SEO valid?
This is just like asking if using an HTML tag is valid for SEO, they are not valid per se, but what makes them SEO valid is the context where they are used.
If it was not valid HTML then it won't be appropriate for SEO, but being valid HTML doesn't makes it SEO valid, it will depend how you use it to structure your content.
a
element contain exactly? The heading for the offer name and a short description? Or more/longer content? Would each offer be in ali
element which contains nothing else?