I managed to solve this by modifying the Gridster.js plugin:
On line 2020, inside the fn.on_resize method I added:
//check the initial size to get the ratio
var ratio = this.resize_initial_sizex / this.resize_initial_sizey;
size_x = size_y / ratio;
That maintains the current widgets current aspect ratio. I've put the full code up in a Gist if anyone would like to see it in context.