What you are doing is fine, but you could ask MathJax to process the whole document rather than each DIV individually (though it doesn't make all that much difference). Try
MathJax.Hub.Queue(["Typeset,MathJax.Hub]);
which should process any unprocessed math on the page. Or you could but a div around all the individual divs and ask MathJax to process that.
No, there is no current method to align separate environment on the page. (The MathML3 specification has such a mechanism, so potentially MathJax could provide access to that through TeX extensions, but MathJax doesn't currently implement that part of MathML3. That is still in the future.)
Another possibility would be to use HTML tables to do the alignment (rather than TeX), and forcing the initial column to be a specific width in both alignments.
Then you could display the rows of the table one at a time to get them to appear as separate "steps".
Alternatively, you could use the \class or \cssId extensions to mark individual portions of a single alignment so that they are initially visibility:hidden (if you want to use display:none you will need to wait until the equation is typeset before setting that) and then change them via javascript as the steps are displayed.
For example
\begin{align}
(x+1)^2
&\cssId{Step1}{= (x+1)(x+1)}\\
&\cssId{Step2}{= x(x+1) + 1(x+1)}\\
&\cssId{Step3}{= x^2+x + x + 1}\\
&\cssId{Step4}{= x^2+2x+1}\\
\end{align}
and have styles such as
<style>
#Step1, #Step2, #Step3, #Step4 {visibility: hidden}
</style>
Then when you want to display the next step, say step n, you would use
document.getElementById("Step"+n).style.visibility = "visible";
This will leave enough space on the page for all the steps to show even when they are not currently visible. If you want only as much space as the current steps are taking up, then you should use
<div id="Steps" style="visibility:hidden">
\begin{align}
(x+1)^2
&\cssId{Step1}{= (x+1)(x+1)}\\
&\cssId{Step2}{= x(x+1) + 1(x+1)}\\
&\cssId{Step3}{= x^2+x + x + 1}\\
&\cssId{Step4}{= x^2+2x+1}\\
\end{align}
</div>
and
<script>
MathJax.Hub.Queue(function () {
for (var i = 1; i <= 4; i++) {document.getElementById("Step"+i).style.display = "none"}
document.getElementById("Steps").style.visibility = "visible";
});
</script>
which will first typset the math in a div with visibility:hidden (so the math won't show up initially), and then
the steps are set to display:none, then make the div visible. Then use
document.getElementById("Step"+n).style.display = "";
to show step n.
Hope that helps.
Davide