Query pager not showing for administrator
Looks like I found the answer. It appears easier (and more efficient) to use the db_select instead, at least for the number of fields I am sorting on. As suspected it was the pager colliding with another pager on the page, although I am not sure what pager this could be. The pager seems to working fine for all users now that I added '->element(0)' to the db_select. Here is some code:

function build_area_table() {
  $header = array(
    'area_name' =&gt; array(
      'data' =&gt; 'Area',
      'field' =&gt; 'n.title',
      'sort' =&gt; 'asc',
    ),
    'level_range' =&gt; array(
      'data' =&gt; 'Level range',
      'field' =&gt; 'flr.field_area_level_range_value',
      'sort' =&gt; 'asc',
    ),
  );

  $query = db_select('node', 'n')
            -&gt;extend('PagerDefault')-&gt;element(0) # fix displaying pager for all users
            -&gt;extend('TableSort');
  $query-&gt;join('field_data_field_area_level_range', 'flr', 'n.nid = flr.entity_id');
  $result = $query
    -&gt;fields('n', array('nid', 'title'))
    -&gt;fields('flr', array('field_area_level_range_value'))
    -&gt;condition('type', 'area')
    -&gt;limit(2)
    -&gt;orderByHeader($header)
    -&gt;execute();

  # build the table
  $td = array();
  foreach ($result as $area) {
    $td[] = array(
      'area_name' =&gt; array(
        'data' =&gt; l($area-&gt;title, 'node/'. $area-&gt;nid),
        'class' =&gt; array('area-name'),
        ),
        'level_range' =&gt; array(
          'data' =&gt; format_area_level_range($area-&gt;field_area_level_range_value),
          'class' =&gt; array('level-range'),
        ),
    );
  }    

  $areaTable = array(
    'area-pager' =&gt; array(
      '#markup' =&gt; theme('pager')
    ),
    'area-table' =&gt; array(
      '#theme' =&gt; 'table',
      '#header' =&gt; $header,
      '#rows' =&gt; $td,
      '#empty' =&gt; 'No areas to display.',
    ),
  );

  return $areaTable;
}


I could probably achieve the same using EFQ, although I can't find an EFQ version of '->element()'. I tried specifying the element via theme like so:

theme('pager', array('element' =&gt; 0))


but there would need to be some kind of check based on the user role, as 0 works for administrators but not for other roles and vice versa. Hopefully this can save someone else some time as well!