Historically, MathJax used span's for in-line math and div's for displayed content because that made it easier to distinguish them for purposes of styling and so on, and it seemed natural to put the block-level MathML in a block-level element. Earlier versions of MathJax didn't have the MathJax_Display wrappers, and didn't set the display style explicitly. Those things came in over time in order to work around pages that set CSS for div's and span's that interfered with MathJax's use of these tags.
You are correct that span's with display:block would work in place of div's, but my understanding is that this is technically illegal as well (though not prevented in practice).
One thing I don't understand is what you are trying to do when you say "semantically relevant HTML". The output of MathJax is not very semantic, and I think it would be a mistake to try to use that for semantic analysis. It would be better to either analyze the original HTML (before processing by MathJax), or to obtain the MathML internal representation from MathJax rather than use the convoluted HTML output. So I'm not really sure what you are after.
As for validation, the output of MathJax is not what would be sent to a validator, but rather the original HTML, so MathJax's output is rather immaterial in terms of that. One can not save the MathJax HTML output for reuse, since it is dependent on the browser, the OS, the fonts available, the zoom level, and a number of other factors that are specific to each individual user, so it should never end up being kept in some permanent form.
On a technical note, your description of the results of mixing the <div>'s with <p>'s is not quite correct. What you describe would (almost) be the case if the MathJax output were being processed but the browser's HTML parser (e.g., if the MathJax output were in the HTML file originally). But the MathJax output is not parsed by the browser; MathJax modifies the DOM by hand by creating and inserting elements into the existing tree. When MathJax adds a <div> to a <p>, the <div> is inserted as a child of the <p>, and the <p> is not split. (See example and output below.) It is only when the browser parses a string of serialized HTML that the behavior you describe occurs. So in MathJax output, the <div>'s are children of the <p>'s, and there is no ambiguity about whether they are part of the paragraph or not. Indeed, the distinction between a <span> child of the <p> and a <div> child of the <p> lets you distinguish in-line from display math (so you can get more information in that sense than you could otherwise). Also, there is no problem with CSS because the paragraph doesn't end and you don't get extra paragraph spacing or other unexpected effects.
<!DOCTYPE html>
<html>
<head>
<title>Test of p and div</title>
<style>
p {margin-bottom: 1em; background-color:red}
p > div {border: 1px solid black}
.box {width: 200px; float: left; margin-right:2em}
</style>
</head>
<body>
<div class="box">
<p>
Insert here:
<div>Inserted div</div>
That was inserted.
</p>
<p>Another paragraph.</p>
</div>
<div class="box">
<p>
Insert here:
<span id="insert">Removed</span>
That was inserted.
</p>
<p>Another paragraph.</p>
</div>
<script>
var ins = document.getElementById("insert");
var p = ins.parentNode;
var div = document.createElement("div");
div.innerHTML = "Inserted div";
p.insertBefore(div,ins);
p.removeChild(ins);
</script>
</body>
</html>
This shows the difference between the parsing of the <div> inside a <p> in the original file and a <div> that is inserted into the <p> by javascript. Here, the paragraphs have a red background and a bottom margin of 1em. I've also styled a <div> that is a child of a <p> so that it has a black border. The result is the following:

The left hand column is when the <div> is in the <p> in the HTML file. As you point out, the <div> does end the initial paragraph, and you get the paragraph spacing above the <div>. Note, however, that a new paragraph doesn't begin after the <div>; the "This was inserted" is not inside a paragraph as you can tell since it has no red background (it is just a text node in the DOM). The origin <p> is closed when the <div> starts, but it is not opened again afterward. The text following the <div> becomes text nodes in the parent of the <p>, and when the </p> is encountered, it is given an opening <p> at that point, producing an empty <p></p>. That empty <p> adds the paragraph bottom margin, and then the following paragraph is in red, as expected.
The right-hand column has the <div> inserted dynamically by the javascript at the end (which replaces the original <span> with a <div>). Note that this <div> remains part of the paragraph (it has a red background since it is in the paragraph, there is no paragraph spacing, and the <div> gets the black border from the CSS rule for p > div).
Here is the DOM after the script runs (from the DOM inspector in my browser):
Note that the first column (the first <div> with class "box") contains five elements: the <p> that was ended at the <div>, the <div> itself, the text node that is not part of a paragraph, the empty <p> produced from the dangling </p>, and the final paragraph.
The second column, however, contains two elements: the two paragraphs that were originally there. The first paragraph contains the inserted <div>. Note that that paragraph is not split by the insertion of the <div>.
So it seems to me that your points (1) and (2) don't really apply (unless you are trying to save the HTML for re-use later, which is not supported, or are using innerHTML to move the HTML around, which will not work properly as it will lose the event handlers that MathJax applies to some elements). I have checked this in Firefox, Safari, Chrome, Opera, and IE (back to IE7) and all produce this same result.
All that being said, it would certainly be possible to change the <div> to a <span>, but I really don't see what the advantage is. Since there are people who have been using CSS rules based on <div>'s versus <span>'s, and such a change would break their pages, I would need something more compelling than what I've seen so far to support that change.
Davide