I know the reason people run a draft is because they hate how much time auctions take, but we use a mixed auction/draft. We select 30 of the best (ideally, the 30 best) players to be auctioned off. Each team gets 100 "points" to spend in the auction. Then you essentially buy your draft position - in a standard draft - with your unused points. Whoever has most points left drafts first, second most drafts second an so on.
We don't have a keeper league, but I'm sure this system would work equally well with one. It's incredibly fair, and if there's a player that you absolutely have your heart set on, there's a way to get him - unlike in either a snake or standard draft.
It's never happened for us, but if the bidding reaches 100 points on any player, you can up the bid by throwing in a draft pick (that you surrender). You then just bid progressively lower round picks.