The big problem is that you modify the vertex_list in parallel with other code in Sprite:
if you change position, scale, rotation or image after the creation, the vertex list will be changed by other code in Sprite and it will not look as a cut sprite.
The proper general way to implement this should be:
1. add a property desired_height to sprite
2. make the setter for this property call _update_position
3. modify _update_position to account for desired_height when rebuilding the vertex list, and also add the texcoord change there
Another way to attack the problem is thinking one level up: a cluster of textured quads.
Suitability for the task depends on the use case, which I don't know.
The implementation can be based on the ParticleSystem code.
The advantage is that theres no long chain of classes interacting,