It took a little fighting with SFML's sprite transforms, but this works:
float shear = 0;
sf::Transform tr = sprite.getTransform();
const float *m = tr.getMatrix();
sf::Transform shearT(m[0], shear, m[12], m[1], m[5], m[13], m[3], m[7], m[15]);
tr = shearT * tr.getInverse();
window.draw(sprite, tr);
The shear variable is a float with a value of zero for a normal sprite. 1.0 would make it shear at 45 degrees to the right. -1.0 would go left, etc.
It might have been easier to use something like a vertex array instead of a sprite, most of the maths above were fighting with some of the hard coded sprite behavior (To shear without making the position incorrect we need to reverse the order of multiplication of transforms, which SFML doesn't allow, so the inverse is to cancel out the bit we don't want). But I like a challenge.