A paper by Richard Lenski et al. shows how to set up a sufficiently dense rewards landscape for the evolution of Boolean functions:
Lenski, R. E., C. Ofria, R. T. Pennock, and C. Adami. 2003. The evolutionary origin of complex features. Nature 423:139-144.
The general idea here that you want to have enough goals of small and intermediate complexity (typically with the value of rewards increasing with the increase of complexity of a goal), so that enough building blocks for more complex goals are created in the process of evolving simpler goals. You don't have to require that more complex goals are made from the simpler goals, all you need is a reasonable expectation that building blocks needed for more complex goals will arise as a side effect of evolving simpler goals.
To make it all work, a system of coding reasonably robust to mutations is needed. A paper by Charles Ofria et al. discribes an apparently successful effort to produce such a system:
Design of Evolvable Computer Languages. Ofria C, Adami C, and Collier TC. IEEE Transactions in Evolutionary Computation 17:528-532 (2002):
They perform evolution on the level of binary code of a virtual computer. One thing they observe is that it helps to have argument-free commands working with fixed stacks and registers (basically, one wants an atomic mutation to make sense). Another feature is that the commands allowing a jump to a numerical address (even if this address is relative to the current place) are harmful to the robustness against mutation. Instead it helps to introduce what they call "templates", and what is just a mechanism of short symbolic labels expressed by a sequence of different "no operation" commands. This is essentially just a method to include short words as symbolic labels right into computer binary code. The jump then seeks the nearest particular label, either forward or backward. This discipline seems to increase the robustness of the code against mutations dramatically.
The experiments were run on the Avida platform, which was developed by the Digital Life Lab at CalTech and is freely available for Mac, Windows, and as a platform-independent source code.