How do I show the latest poll user hasn't voted on, yet?
I think I figured it out. I copied the hook_block_info and _view from the poll module to my own module and modified the query a bit. It basically now takes any poll that a user hasn't voted on or hasn't voted on during this session.
I don't have voting for anonymous enabled.

function mycustom_block_info() {
  $blocks['recent']['info'] = t('Most recent poll not voted on');
  $blocks['recent']['properties']['administrative'] = TRUE;
  return $blocks;
}


function mycustom_block_view($delta = '') {
  if (user_access('access content')) {
    // Retrieve the latest poll.
    $select = db_select('node', 'n');
    $select-&gt;join('poll', 'p', 'p.nid = n.nid');
    $select-&gt;leftjoin('poll_vote', 'pv', 'pv.nid = n.nid');
    $select-&gt;fields('n', array('nid'))
      -&gt;condition('n.status', 1)
      -&gt;condition('p.active', 1)
      -&gt;condition(db_or()-&gt;condition('pv.chid', NULL)-&gt;condition('pv.timestamp', REQUEST_TIME - $lifetime, '&lt;'))
      -&gt;orderBy('pv.chid', 'ASC')
      -&gt;orderBy('n.created', 'DESC')
      -&gt;range(0, 1)
      -&gt;addTag('node_access');

    $record = $select-&gt;execute()-&gt;fetchObject();
    if ($record) {
      $poll = node_load($record-&gt;nid);
      if ($poll-&gt;nid) {
        $poll = poll_block_latest_poll_view($poll);
        $block['subject'] = t('Poll');
        $block['content'] = $poll-&gt;content;
        return $block;
      }
    }
  }
}