How to create a separate Loop for custom post types?

You don’t specify this, but if your lessons are being pulled in along with your arrangements then you must be using default WordPress posts for the Lessons… assuming that, here’s what’s happening in your code.

On the second line when you’re setting your query arguments ($args) you specify that you want BOTH the posts post type and your custom arrangements post type. So you get both.

Simple fix though, just use this for your $args.

$args = array(
    'post_type'   => 'arrangements,
    'post_status' => 'publish',
);

You could still leave it as an array though, no harm…

$args = array(
    'post_type'   => array('arrangements'),
    'post_status' => 'publish',
);

Give that a try and see if you get the desired result.