Yeah, but if you evaluate exec("import sys;sys.exit()") (or even just sys.exit()) then it will result in an error which you (nor me) can not handle properly, and only the Console itself can do that. It does work for most stuff, but not for one of the most usefull utilities in BC (sys.exit()).
exec is actually a keyword in Python, meaning, so much baked in, it would be rather painfull to remove it, unlike things like regex and xml, which are "just" standard extension modules in Python, which were removed. And it's usefull.
The reason why the Console can handle it, is because it captures all the exceptions Python generates (otherwise it would leave the console in an unusable state). One of them is the one sys.exit generates (SystemExit to be exact), now, if you want to really exit Python through that (and you must), and you do your own console, you would just not capture the exception (or rethrow it), but because you are working in an event handler, in BC, you will either ignore it (don't exit BC), or you will allow the Debug Window to pop up with no errors shown (other than the one you print).
But because we are in the console, a C++ side object, it can notice the exception and handle it by calling it's own, internal, exit procedure, which results in the neat exit of BC.