I came up with a solution myself for this that did not have too big an impact in my design. When checking for collisions, instead of using the Rect associated with the sprite I use a new method called get_hit_box(), which calculates and returns a new Rect. So instead of
if player.rect.colliderect(flag.rect):
I have
if player.rect.colliderect(flag.get_hit_box()):
The method get_hit_box() returns a Rect which has the same center as the Rect of the image but different dimensions. This allows me to define the collision Rect I want, regardless of what the image is. To prevent having to change too much code, the get_hit_box() method in the parent class of all sprites just returns the unchanged Rect of the image, self.image.rectget_rect(). Every sprite now has that method, and I redefine it only in those sprites where special collision behavior is needed.
Hope this helps someone else.