Hi,
An I/O-expander would be the sensible choice here, if it's just more I/O you're after.
If you want what's called distributed computing, you can use any other controller for sub modules. I usually go with one (small) controller to handle all steering, one (or two) for the sensors and so on. A master controller then just have to act as a conductor (of the orchestral kind) and can send orders to actuators like "turn left by 15°" and the steering does it's job without burdening the master. When the position (here 15°) is reached, it sends an "OK, I've reached the position of 15° now", which is read from the master at a convenient time and answered with a "OK, I hear you".
This makes it very easy to shift modules around and your main program can be simple (just like each module) and hey, controllers are cheap, especially the small PICs I use.