For loops aren't as magical as "break" or "continue". They are just a particular client for iterators. C has hard-coded for loops. Python's for loops do almost anything you want or need them to do, and indeed, coming at them from a C point of view is really missing the point. Anything conforming to the iteration protocol can be used in a for loop [1], and indeed, if you're feeling evil, code in the for loop can even manipulate the iterator as it goes. Not recommended, but it would work.
"with" is a special statement, yes, but the specialness is all stuff you can access from a first-class point of view, up to and including dynamically creating a class that implements the "with" behavior you want, then using that with "with". Yes, you can't create your own arbitrary special-purpose statements the way you can in Lisp, but neither is it true that "with" is cast in stone such that you can't do anything with it. Write anything that conforms to the "with" protocol [2] and it'll work.
Also "first class" in the sense that you can program them are . (the attribute retrieval operator) and [] (usually the dict-lookup operator, but it can be rewritten to do anything you like for a given object).
Mind you, I'm not saying that Python is as flexible as Lisp, it clearly isn't. But it does not lead to understanding to say that "with" has no "first-class" aspects to it. It occupies a middle-ground between C and Lisp. Python has chosen this approach with due deliberation. You might still not like it after you understand it, but let us damn it for what it is, not for what it isn't.
[1]: http://docs.python.org/library/stdtypes.html#typeiter
[2]: http://docs.python.org/reference/datamodel.html#with-stateme...