Is there a way to set the pager's page number programmatically without the page being in the url?
You can use AJAX to call a new request so you will not have the page in the URL
or, if you use Views, select "Use AJAX" under the Advanced Settings, and it will enable AJAX on your pager.