What is the best practice to exchange variables between page calls I am trying to display a list of objects related to my custom node, by showing one node on the node's page and also giving a "next" button which will call the same page but with the id/index of the next objects to display.

Is there a custom/better way to do it than with a GET parameter added to the url of the page call and then the reading of this parameter in the template file via $_GET[]?
You should never read the value of the $_GET param in a template file directly, that logic should be separated out into a process/preprocess function.

Other than that, no...there isn't really anywhere 'better' for page parameters to go. The alternatives are to use something session based, or to set something up to POST variables to the second page. Or use temporary database storage which seems like overkill for this.

Your use case sounds like the archetypal situation where URL parameters would be acceptable. For example, it's the same way Drupal core handles paging (the page parameter is added to URLs).

If you're worried about separating these pages up for SEO benefit, that's a different matter, and you should look at creating unique paths for each piece of content (provided of course that the page changes enough to not be seen as a duplicate with the URL parameter available).