The calc() function is part of the CSS3 /Values & Units/ module[1] which is currently in Last Call status[2]. Here[3] are the status definitions that apply to CSS3. It doesn't make sense to remove the moz prefix until the standard is (probably) done changing.
In addition, mozilla's implementation of it is still in flux (since it's not done) and using the non-extension terminology for an in-development feature is a great way to convince people to use it and then screw them over when you change it.
Also, I found out about all this because you asked. So thanks for causing me to learn something new today :)
I believe they do this for CSS3 features where the spec is still in flux (Note that CSS3 is still in development, at least if Wikipedia is to be believed.)
The specific reason is that using an anonymous name for a specific implementation means that pages written only to that implementation will instantly break when it's standardized differently - hence explicitly identifying your browser's version of an unfinished standard is a form of goodwill.
It is also nice when different browsers interpret the spec differently. If both Chrome and Firefox had a feature named the same, but requiring different number of arguments, it would be a problem... Eventually it will get sorted out (hopefully).
It's better to use a different attribute than other browsers until it becomes a standard. That way, you don't get unexpected behavior (READ: IE6 box model bugs that annoyed so many people) when it is finally standardized.
Most of CSS3 has a ways to go until it becomes a standard, so Mozilla uses its own attribute to reflect its unique implementation/interpretation of what is there currently.