How can I implement pagination on custom category page?

It’s far easier to use built-in loop functions such as pagination when you use a category template based on the template hierarchy.

You mentioned using the category ID to load posts into your custom template page, but if you instead name the template file based on the category ID, you can simply use the default WP loop, and include <?php echo paginate_links(); ?> to display the pagination you seek.

Proper Category Template Naming w/ ID:

category-{ID}.php

Alternatively, if you prefer to press forward using your existing custom category template naming, you can still utilize paginate_links() with $args that correspond with your query.

Read More about paginate_links().