How does $E=mc^2$ put an upper limit to velocity of a body?
$E_0 = m_0 c^2$ is only the equation for the "rest energy" of a particle/object.
The full equation for the kinetic energy of a moving particle is actually:
$$E-E_0 = \gamma m_0c^2 - m_0c^2,$$ where $\gamma$ is defined as $\gamma = \frac{1}{\sqrt{1 - (v/c)^2}}, $
where $v$ is the relative velocity of the particle.
An "intuitive" answer to the question can be seen by noticing that the particle's energy approaches $\infty$ as its velocity approaches the speed of light. Thus, in order for the particle to move faster than the speed of light would require it to attain infinite kinetic energy, which can't happen.
To complete bclifford's answer, our current equation for energy-momentum of a particle is $E^2=p^2c^2+m^2c^4$ which is the final expression for $E=\gamma mc^2$, where $\gamma$ is the Lorentz factor obtained from his transformations.
Hence, for a particle like the photon - this equation is valid throwing $E=pc$, which says that the photon has momentum.
For particles at rest, $p=0$ which gives the rest energy $mc^2$ of the massive object.
The great necessity of this equation is that it restricts massive objects to be accelerated above $c$ as it requires infinite energy, massless particles to travel at $c$ always and also faster-than-light hypothetical particles to travel above $c$ always...
You can consider $pc$ and $mc^2$ as the opposite and adjacent sides of a right-angled triangle and the energy along the hypotenuse. No matter how fast a massive object moves, the hypotenuse is always greater than the other two sides, (i.e.) it can never quite reach $c$...
It doesn't. The equation $E = mc^2$ and the fact that no physical object can be accelerated past the speed of light are two entirely separate conclusions of special relativity.
The reason $c$ is an upper bound on the speed of an object has to do with the Lorentz transformations. These are the mathematical expressions that relate positions and times as measured by one observer to positions and times as measured by another observer. Now, suppose an object starts at rest with respect to observer A, and then accelerates until it is at rest with respect to observer B, which is moving at a speed $v$ relative to A. There has to be some Lorentz transformation you can use to convert between A's measurements and B's measurements, or equivalently, between the reference frame of the object pre-acceleration and its reference frame post-acceleration. But there is no Lorentz transformation that will take you from a reference frame in which an object is going slower than light to a reference frame where the same object is going faster than light or at the speed of light.
(Technically, that argument is a little hand-wavy, but it should get the main point across.)