The traditional SANs of yesteryear are not a whole lot more than very high-performance, network-attached RAID arrays with additional features stapled onto them. Instead of being internal to and accessible by a single server, they're externally located and many servers can share them. However, individual groups of physical disks are still statically formed into RAID arrays that make up a given volume.
If you want to make changes on a traditional SAN -- such as expanding a volume -- you need to assign new physical disk resources to the volume, and the RAID array needs to be extended across the new disks (often a time-consuming process involving significant data reshuffling on physical disks). Similarly, snapshots are usually implemented by dedicating a second volume to hold snapshot data -- a process that can result in a significant write performance hit when snapshots are present.
Virtualized arrays overcome these and many other challenges by layering an additional level of abstraction around the RAID that provides the physical disk redundancy. Instead of dedicating specific disks to an array, many disks are pooled together and each virtual disk is divided into blocks sprinkled across all of them. Though implementations vary from vendor to vendor, the array will typically utilize an internal pointer table to relate the storage block address of a virtual disk as it is presented to the server to the actual physical location on the array's RAID volumes.
This abstraction allows these arrays a great deal of freedom to handle complex operations such as volume expansions, snapshots, and replication. Instead of requiring the designation of a new physical disk to be a member of a given volume and needing to wait for the data to be redistributed, the SAN merely updates its pointer table with the addresses of as-yet unallocated blocks on the physical disks, usually an operation that can be completed instantaneously. Many virtualized SANs also allow you to thin provision virtual disks, a simple matter of waiting to allocate physical blocks to a virtual disk until they're actually written.
Snapshots are handled similarly; instead of needing to designate a separate volume to hold snapshot data, the array simply writes new incoming data into unallocated physical disk blocks and mark the physical blocks they would have replaced as being a members of a snapshot instead of the main virtual disk. Again, this requires no data to be moved on physical disk, which usually results in very little if any performance overhead.
Some virtualized storage arrays even allow you to virtualize storage from other storage devices, essentially allowing them to be managed under the same umbrella. However, support for third-party devices can sometimes be very limited, and there may be a palpable performance hit involved when this capability is leveraged.
Network-based storage virtualization
If you think the abstraction offered by virtualized arrays give storage administrators a lot of flexibility, you haven't seen anything yet. Instead of simply abstracting a virtual disk from the physical disks present within an array, network-based storage virtualization abstracts a virtual disk from the actual device it resides on -- providing a single management interface for an entire organization's storage devices (so long as the virtualization device supports it).