theme("pager") returns NULL
The problem is the query that is probably too complex, and pager_query() cannot alter it to obtain the total number of row matching the query passed as argument.
As reported in the documentation for pager_query():


  The pager uses LIMIT-based queries to fetch only the records required to render a certain page. However, it has to learn the total number of records returned by the query to compute the number of pages (the number of records / records per page). This is done by inserting COUNT(*) in the original query. For example, the query SELECT nid, type FROM node WHERE status = '1' ORDER BY sticky DESC, created DESC would be rewritten to read SELECT COUNT(*) FROM node WHERE status = '1' ORDER BY sticky DESC, created DESC. Rewriting the query is accomplished using a regular expression.  
  
  Unfortunately, the rewrite rule does not always work as intended for queries that already have a COUNT(*) or a GROUP BY clause, and possibly for other complex queries. In those cases, you can optionally pass a query that will be used to count the records.  
  
  For example, if you want to page the query SELECT COUNT(*), TYPE FROM node GROUP BY TYPE, pager_query() would invoke the incorrect query SELECT COUNT(*) FROM node GROUP BY TYPE. So instead, you should pass SELECT COUNT(DISTINCT(TYPE)) FROM node as the optional $count_query parameter.