Why not Java, C#, ...
In the absence of requirements to interoperate with existing code bases, what advantage does Java or C# have over, say, Smalltalk? I'm a C# programmer by day (and former Java programmer) and there are some good things about it and some bad things, but one thing that really sticks out is how incredibly complex it is. Look at how many questions there are here about the finer points of C# syntax and semantics. You'd waste your whole semester or year teaching trivia. Modula-2 is much simpler and perfectly adequate for many problems.
You need to learn assembly, too, and going from Modula-2 to assembly is a much easier step than C# to assembly. I would not want to try to teach assembly to a bunch of students who only knew Microsoft's professional tools.
Related: Is it backwards to still teach LISP?
(There's about 50 different ways to interpret this...)
I don't see what's "backwards" about it, unless you're seeing it taught {before,after} a lower-level language and think it should be taught {after,before} instead.
Can you suggest another language that does what it does? (Smalltalk? Forth? Icon? Factor?) For example, if you want to see the design of a real OO system (and arguably a more powerful one than Java or C#), you can pick up AMOP and see the whole thing in a short book, including complete source code. (Common Lisp isn't the simplest Lisp dialect, but it's a lot simpler than C# or Java, and AMOP uses a relatively small subset of it anyway.) How would you teach metaprogramming, or even multiple dispatch, with Java?
Or: the original purpose of Lisp was to replace Turing machines as a construct for building algorithms. (It just happens to be really useful for writing real programs!) Are you suggesting that you'd rather using Turing machines for teaching algorithms? Or C# for modeling computation? A Turing machine is a 7-tuple -- I can't imagine how many components the C# computation model would have! Lisp bridges the gap perfectly, and I've only seen one or two other languages in this space -- Forth comes to mind, but for whatever reason it's not become popular in academia.
...Haskell?
I think it's a great idea. I learned it in school. Then again, I think any member of that language family would do fine. If you learn ML in school instead, I don't think you'll be any worse off. The concepts are the same.
It's like studying mechanical engineering in Berlin versus Chicago: the language may be different, but the concepts are the same. But if you don't know anything, not even a language, it makes sense to start with the simplest language possible. If you want to be an engineer in Berlin but speak no German, it makes sense to study engineering and to also study German, but the conventional thinking is that it's less effective to start with German-only engineering classes.