First thing I'll say: Anyone who has used Game Maker for more than a month (I'm including all beginners) will never touch any drag-and-drop function other than the "Code" block.
As someone who has started with Game Maker and has been using it ever since, I'm going to go ahead and say that there are no limitations to what you can make. Someone made their own version of Steam with it, and is one of the highlighted games on the Game Maker Sandbox website. (Edit: That's a "was," they change it quite often, but it was up there for a while.)
They even made a DLL for users to embed into their game for integration with the system.
No, there isn't freedom in that you can modify the way that Game Maker runs, but that's rarely ever impeded development. Certain restrictions are a bit annoying (such as objects are just a collection of values and "events", so making your own data structure has to be done with a C-style API.) Speed is as much of a concern as it is with any language that is interpreted.
For things that are a speed concern, you're free to write some code in C++ and compile it into a DLL. GML has support for DLLs through extern_define() and extern_call(). I did this with a recent game that required AI that sorted through hundreds of instances at a time for, where such code in any interpreted language would provide unacceptable speed hits.
And then, for a lot of the things that Game Maker can't do but you don't want to make yourself, there's the unofficial GMToolbox:
It's a nifty little set of tools that provide just about any bit of game functionality that you can think of, and then some. Looking at everything under the Hardware/Compatibility section blows my mind. Also, these are all extensions that link into Game Maker's editors. Each of which you can override for your own preferable editor (you just can't change the object/room editor.)
For smaller games, it's definitely best to go Game Maker unless it's 3D (Game Maker can do 3D, but it's just not very good with it) or you're doing it for educational/for-the-hell-of-it purposes. Shunting the built-in level editor, real-time error checking and auto-completing code editor, resource integration into the language, and auto-packaging of your final application (you can finally just send an EXE instead of a ZIP or an installer) makes no sense whatsoever.
Even for larger games it's not a bad idea. Iji is a great example:
At least 20 giant levels with good AI and boss fights, great game balancing/level design, and some awesome game mechanics. The story is a bit cheesy and the main character is dull as hell, but hey, that defines a lot of AAA games right now.
Even if you never use it for anything else, I do suggesting taking a look at it for things like Ludum Dare or Indie Speed Run.
It really is unfortunate that so many crap games are made with it.