You can make the collision polygons 1px smaller. To pin a neighboring sprite you'll have to again check for "overlapping on offset" instead of using "on collision".
So when the player arrived to a new position, check if it's overlapping at a small offset (say 2 pixels) any new pieces in four direction. If it does, pin these pieces to the player.
Answering your second question - you can put small invisible sprites in the center of each cell in the target area. When all these sprites are overlapping the player will mean that the level is completed.