Get all posts including sticky ones with get_posts(),setup_postdata(), and foreach loop?

Updated answer:

The default behavior of WP is exactly what you want. The problem is that you are using get_posts() which completely ignores the sticky post behavior by forcing ignore_sticky_posts = true (check the source). So you need only one query, just use WP_Query():

$postsList = new WP_Query([
    'post_type' => 'post',
    'posts_per_page' => $default_posts_per_page,
    'paged' => $paged
]);

The sticky posts will be at the top and – if paginated – will be repeated again on pages ordered by their date (default ordering).

To avoid posts’ stickiness use 'ignore_sticky_posts' => true in your query. It does not exclude the sticky posts just removes the ‘sticky behavior’ so the posts will be ordered by date (default ordering).

new WP_Query([
    'post_type' => 'post',
    'posts_per_page' => $default_posts_per_page,
    'paged' => $paged,
    'ignore_sticky_posts' => true
]);

Codex link: https://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters