Так, переделал на глобальные переменные. И в самое начало добавил xmlworking = true;.
Виснуть вроде перестало. Но вылез совсем странный глюк - после очередного обновления по всему экрану псевдографика вылезла. Такое ощущение, что в обработчике глюк, хотя там ломаться-то нечему. removeChild(tbl_body) - удаляем старые данные, дальше серией createElement() создаем новую таблицу и в конце appendChild(tbl_body) добавляет новую таблицу на страницу.
function ch_tbl_section()
{
    if(!http)
    {
        http = get_http();
        xmlworking = false;
    }
    if (!xmlworking && http)
    {
        xmlworking = true;
        
        url = .....;
        http.open("GET", url, true);
        http.onreadystatechange = function()
        {
            if (http.readyState == 4)
            {
                ...
                xmlworking = false;
            }
        }
        http.send(null);
    }
    if(!http) alert(\'Ошибка XMLHTTP!\');
}