Following the top answer to this stack overflow question I was able to make a draggable and resizable path-based shape using Raphaël.
The one thing I can't figure out is how to avoid unequal scaling if the path has a stroke to it. As long as the scaling is 1:1, the stroke width stays the same, but stretching the path in one direction or another thins the stroke in one direction. Is there a way to transform a path without affecting the stroke?