The reactor is essentially an abstract class for low level event loop implementations, stripped to the functionality that each implementation can implement differently. They don't do anything except watch filehandles and set timers, start and stop, and run callbacks when something happens while running. Mojo::IOLoop is the user interface that can decide what reactor implementation to use, implements the singleton that different parts of the process can hook into, and implements higher level abstractions like streams, clients, and servers.
-Dan