In Festival we make a firm distinction between the core system and the modules which actually perform speech synthesis tasks. The core system, which includes the architecture is written completely in C++ and doesn't change. Modules on the other hand can be written in C++ or scheme and can be added or taken away form the system with minimal disruption (adding or taking away a C++ module requires a re-linking of course, but not a major re-compilation). The decision of which language to write a module in is largely a matter of choice. Because of the interpreter aspect, it is usually easiest to develop modules in scheme and maybe for efficiency re-write them in C++ after they are stable. Some types of programming (e.g. arrays in C++, recursion in scheme) are more natural in one language than another. Finally, depending on personal experience, some programmers simply prefer one to the other.
As far as possible we have provided identical interfaces to the architecture in both languages which makes switching between each relatively easy.