A custom ROM can be as little as a pre-rooted stock ROM, and with root you can do virtually anything. Thus the main advantage over just rooting is that the work has been done for you already if you grab a custom ROM with features you're interested in. For example, a custom kernel with better support for overclocking may be included in a custom ROM.
As the name implies, a ROM cooker has a lot of freedom to customize. But, in general, the "well known" custom ROMs have:
- Custom themes, or at least wallpapers or widgets. This might include modified system colors and icons, startup screens, etc.
- Root, of course (see the advantages of rooting).
- Less bloatware (e.g., removal of T-Mobile's "My Account").
- Useful utilities for the kind of person who flashes custom ROMs (e.g., ROM Manager).
- A mishmash of modems and kernels, selected for best battery life or performance. Modems are usually stock but kernels may be stock or custom.
- Additional options in menus (e.g., CyanogenMod allows a user to reboot to recovery or fastboot mode instead of just rebooting the device normally).
- Additional user interface tweaks (e.g., CyanogenMod allows users to place on/off controls in the status bar instead of using widgets).
Finally, custom ROMs don't have to be stock-based to begin with either. This might enable extra system-level features (built-in tethering, for example) or allow you to upgrade to a version of Android that hasn't been or won't be released for your device. It can also free you from hard-to-remove bits of stock ROMs, such as their custom UIs / launchers that often cannot be removed.
- Custom ROMs, especially those not based on stock, are often a bit experimental. They may not be as stable as stock, especially with custom kernels or when not stock-based (drivers are hard to get right).
- A custom ROM can include virtually any apps the creator wanted to include, and you may consider them bloatware.
- Custom themes may not be what you want; many ROM cookers aren't designers.
- Something unsavory or malicious could be included in the ROM.
- Bricking your device is always a possibility. Make sure you know what you're doing when you flash a custom ROM, and never use a ROM designed for a different device.
- Like rooting, flashing a custom ROM will almost certainly void the warranty of a non-"developer" (e.g., Nexus) device.