What differences are there betwee Flash CS4 and Flex, besides the GUI of Flash?
Flash is more focused on animation (comes with a library, etc.) and Flex is focused on web application development.
A nice article covering Flash and Flex can be found here.
Flex is a programming environment, with a proper programming IDE like you'd find for Java. It's focused on software development - the fact a Flex app is compiled to a Flash SWF binary is almost irrelevant. Flash CS4 is an art/graphic design tool. It allows you to do some coding, but this is focused on tagging code onto animations. It's a bit like how you can do coding in MSAccess - it's allowed but not the main focus, and the development tools are not at all geared at coders. In fact you have to learn how to even find the code in CS4.
Bottom line, if you are a programmer then Flex will seem natural. CS4 won't.
"Flex" isn't the application, "Flex Builder" is. That's important - "Flex" is a framework. Asking the difference between Flash and Flex is a bit like asking the difference between JavaScript and JQuery.
Flex Builder is an eclipse-based code editor that has built-in support for the Flex framework. The Flex Framework gives you a powerful set of tools for working with data - these tools are generally speaking not available in Flash.
If you're doing something really complex that deals with dynamic data, it might be worth considering using Flex instead of straight up Flash.
It gets a little confusing, though - you can use Flex Builder as your ActionScript editor in a Flash project. In other words, you still have the .fla but you do your coding in Flex Builder instead of Flash. The reason many people do this is that Flex Builder provides a much more robust code editor. For instance, you'll get code hinting for custom classes - which is an enormous timesaver if you're building something even moderately complex.
I hope that helps! Both Flex Builder and Flash are powerful tools, I'd recommend playing with both of them to get a sense of what you can do with each.