There are multiple products that can do this but each has their own area they specialize in. With vCloud Director users can create VM's from scratch and select all the computer resources they want as long as they have them available within their Organization. Media will need to be available (can be added to the "catalog" area) for OS installs. System administrators create each Organization and the compute/storage/network resources each Organization has access to.
The system administrator OR user can create templates as well which have base CPU/Memory/Disk/OS settings. The OS can be customized based on scripts when deployed and the user can have access to add more CPU/Memory/Storage resources if they want to.
Other products allow users to select software or "configurations" and it automates the build process for these users in the background in vCenter, vCloud Director, or other virtualization environments. Administrators still have to script the processes that are presented to the end user though.