<p>So, I'm working under the assumption that we have typed languages because we make a lot of mistakes... so typing is one way to have the compiler do a lot of checks for us and help us out a bit (please let me know if it is my assumptions that's incorrect).</p>

<p>However, if we introduce casting to a typed language, don't we re-introduce most the problems we had when were not able to type variables?</p>

<p>I'm also aware that my assumption isn't the only reason why we type variables. Please share some of the other reasons why we have typed languages.</p>

so typing is one way to have the
  compiler do a lot of checks for us and
  help us out a bit
Yes.
However, if we introduce casting to a
  typed language, don't we re-introduce
  most the problems we had when were not
  able to type variables?
Yes.
You should avoid it to the extent possible, but sometimes you still need to do dirty work.
Of course, there are plenty of languages that do not enforce strict typing, and plenty of people who like them and get useful work done with them.