i like to explain it like this. its rough but pretty straight forward.
Raid groups are protected sets of disks. consising of 1 or 2 parity, and 1 or more data disks. We don't build raid groups, they are built behind the scene when you build an aggregate. for example:
in a default configuration you are configured for RaidDP and a 16 disk raid group (assuming FC/SAS disks). So, if i create a 16 disk aggregate i get 1 raid group. if i create a 32 disk aggregate, i get 2 raid groups. Raid groups can be adjusted in size. For FC/SAS they can be anywhere from 3 to 28 disks, with 16 being the default. you may be tempted to change the size so i have a quick/dirty summary of reasons.
Larger RG Smaller RG
Better Space utilization worst space utilization (think of the ratio of parity to data disks)
worst protection better protection (think of the ratio of parity to data disks)
better performance worst performance (roughly more data disks gives you better performance)
more risk less risk (smaller raid groups rebuild faster)
Aggregates are collections of raid groups. consist of one or more Raid Groups.
I like to think of aggregates as a big hard drive. there are a lot of similarities in this. When you buy a hard drive you need partition it and format it before it can be used. until then its basically raw space. Well, thats an aggregate. its just raw space.
A volume is analogous to a partition. its where you can put data. think of the previous analogy. an aggregate is the raw space (hard drive), the volume is the partition, its where you put the file system and data. some other similarities include the ability to have multiple volumes per aggregate, just like you can have multiple partitions per hard drive. and you can grow and shrink volumes, just like you can grow and shrink partitions.
A qtree is analogous to a subdirectory. lets continue the analogy. aggregate is hard drive, volume is partition, and qtree is subdirectory. why use them? to sort data. the same reason you use them (at least i hope you use them) on your personal PC. There are 5 things you can do with a qtree you can't do with a directory and thats why they aren't just called directories. Oplocks, security style, Quotas, Snapvault, Qtree SnapMirror.
last but not least, LUNs. As Eugene mentioned its a logical representaion of space, off your SAN. but the normal question is when do i use a LUN over a CIFS or NFS share/export. i normally say it depends on the Application. Some applications need local storage, they just can't seem to write data into a NAS (think CIFS or NFS) share. Microsoft Exchange and SQL are this way. they require local hard drives. So the question is, how do we take this network storage and make it look like an internal hard drive. the answer is a LUN. it takes a bit of logical space out of the aggregate (actually just a big file sitting in a volume or qtree) and it gets mounted up on the windows box, looking like an internal hard drive. the file system makes normal SCSI commands against it. the SCSI commands get encapsulated in FCP or iSCSI and are sent across the network to the SAN hardware where its converted back into SCSI commands then reinterpreted as WAFL read/writes.
Some applications know how to use a NAS for storage (think Oracle over NFS, or ESX with NFS datastores) and they don't need LUNs. they just need access to shared space and they can store their data in it.