One technique you should be familiar with in any case is the action list approach. At the simplest level, it's just a list of action objects, which each action object has its update() method called each frame. You can quickly expand on this however to allow blocking actions, multiple lanes of actions, child groups, etc. Just about anything you can build with a high-level FSM can be implemented in a more modular, flexible, and debuggable fashion with an action list using behavior actions.
Aside from being a useful technique for managing all the animation, path finding, and other miscelleneous "stuff" your characters can do, it makes it trivial to implement a priority-based decision making system by creating behavior actions.
A few notes about how to use them can be found in this slide deck: http://sonargame.com/2011/11/01/new-game-slides/
Pretty sure there's been articles about it in the AI Programming Wisdom series, too.