How can I make teasers refresh when they are flagged?
Step 1 (PHP part):

You need to implement, hook_flag_javascript_info_alter() function, and pass in the refreshed teaset html, so that you can use this in js file.

function yourmodulename_flag_javascript_info_alter(&amp;$info) {
  $content_id = $info['contentId'];
  $node = node_load($content_id);
  $view = node_view($node, 'teaser');
  $rendered = drupal_render($view);
  $info['rendered_node'] = $rendered;
}


Step 2 (JS) Part:

Now upon flagging, you will have the refreshed node html as data.rendered_node. So employing your js code you wrote above:

$(document).bind('flagGlobalAfterLinkUpdate', function(event, data) {
  var node_id = data.contentId;
  var rendered_teaser = data.rendered_node;
  //here you have to check the logic, find the selector that is to be
  //replaced, and then replace that with the 'rendered_node' variable we declared above.

});


Please note that my intention here was to give you a direction and the general logic and not the exact code, so most probably you have to modify the above code to make it work.

UPDATE:

In the step 2 code, you see I got a variable node_id. That is the nid of the content that was flagged. In the html,  you must be having some class using that nid, may be "node-765"..where this 765 is the id. look for such a class. Once you have the class name, and say that class is of the form "node-nid-765". So we will check for that like this:

$('node-nid'+node_id).replace(rendered_teaser);


Again please note the class names are not exact and have been provided to give you an example.