posts_nav_link(); not showing up on static pages

posts_nav_link is intended for archive pages. That function uses get_next_posts_nav_link which uses the global variable $wp_query. There is a check for !is_singular(). That will always be false on your “static” page, since $wp_query will represent the page (single) and not the query you have created. So, yes, it is because it is a static page.

Chip Bennett wrote/compiled an fairly exhaustive answer explaining how to make pagination work.