Does anyone know why this happens?
Because Google designed it to use tag soup instead of HTML
How to make this compliant?
The documentation has alternative markup that is valid under the draft HTML 5 specification:
<div class="g-plusone" data-size="standard" data-count="true"></div>
If you want it to work with HTML 4.x or XHTML 1.x then you might be out of luck (although you might be able to add the non-compliant markup using JS, but that would just be a hack to conceal it from validation and not at all in the spirit of valid markup)