The problem is that the ajax() function itself overwrites the contents of this_div because that is the target specified (i.e., it replaces the DIV contents with the returned <script> element, which then appends the text to the DIV). If you want to append instead of overwrite, you can do so via Javascript, but in that case you need to specify ":eval" as the target:
<a href='#' onclick="ajax('append?what=first', [], ':eval')">click</a>
<div id='this_div'></div>
Controller:
def append():
if request.vars.what == "first":
something = "ABC"
else:
something = "DEF"
return "jQuery('#this_div').append('%s');" % something
Note, no need for the <script> tag in that case -- just return the Javascript to be executed. Also, if your append() function doesn't use the "content" input, the second argument to ajax() can just be an empty array (i.e., []) instead of ['content'].