Custom roles allow you to setup a role with specific access rights. You are then able to assign the role to a user and they will inherit the access rights for that role. For example you could setup a role for volunteers, which has limited access to functions on the contacts form.
Custom roles are useful when creating roles for modules that are not covered by preset roles or if you wish to create roles that cover your organisations specific needs.