I consider the following to be good reasons for employing custom controls:
I find the last two reasons to be the most interesting. Many successful games, multimedia programs, and children's programs use few standard controls. Examples include Microsoft Encarta, Microsoft Money, and Microsoft Greetings Workshop. There are several reasons for this. The first is that most multimedia applications have to compete with other alternatives. For example, Encarta has to compete with printed encyclopedias, which have extremely high production values. An online encyclopedia limited to the standard controls would not provide a comparable visual experience. The goal behind Encarta's interface is to make finding its information as pleasant an experience as possible. General productivity is not the most important goal. In fact, people sometimes use the product just for the fun of it and not to accomplish any specific task. Furthermore, people normally don't use Encarta all day, as they do professional applications such as Microsoft Visual C++ or Microsoft Office.
Programs like Greetings Workshop and children's programs use custom controls to create interfaces that even the most inexperienced user can immediately understand and operate. This makes using the program a pleasant experience for this level of user, and it maximizes the size of the product's potential market. Since the typical user runs this kind of program so infrequently, there is little need for advanced user interfaces to improve productivity. In Greetings Workshop, the assistant, Rocky the dog, helps make all tasks foolproof. (While I could easily live without Rocky, my two-year-old son, Philippe, loves him.) For example, while you are working on a project, Rocky presents all the tasks you are likely to want to perform so that you don't have to search for them.
Since modal dialog boxes can confuse beginning users, Greetings Workshop helps guide the user through the process. For example, if you click outside a modal dialog box, Greetings Workshop displays a hint, as you can see in the following screen shot, to get you back on track.
If you are creating a user interface at this level, it's fairly easy to justify using custom controls, since the standard controls simply do not provide this type of behavior.