Thanks to Peter Kahrel excellent ScriptUI guide, I found out a good way to do it. I simply create a new list box, add it to the palette and delete the old one. It works great. I am using this function inside my script. It may not make total sense because you can't see the whole script, but you should be able to see where I am making a new list and deleting the old one.
function updateList () {
var newList;
palette.currIndex = set.index;
palette.text = "attribute: " + set.name;
// Create a new list for the new values.
// Use the existing list's bounds so the new list will be the same size/location.
// set.values contains the new values for the listbox.
newList = palette.listGroup.add ("listbox", palette.attrValues.bounds, set.values, {multiselect:true});
newList.alignment = ['fill', 'fill'];
// Delete the old list.
palette.listGroup.remove (palette.attrValues);
// Update the variable so it points to the new list.
palette.attrValues = newList;
}