Perhaps a cummulative voting system? For the primaries, make it a free-for-all where everybody gets 2 or 3 votes - you can throw them all behind one person or split them out to hedge. Then for the general election pick the top 3 from the primaries and have another vote (again with cummulative voting).

This way, the more liberal Republicans and more conservative Democrats could actually have a chance of winning, which more of America would prefer to having two fairly extreme candidates to choose from.