blocking the admin section (but still using admin-ajax.php)

The following action hook should help:

add_action('admin_init', 'wpse28702_restrictAdminAccess', 1);
function wpse28702_restrictAdminAccess() {
    $isAjax = (defined('DOING_AJAX') && true === DOING_AJAX) ? true : false;

    if(!$isAjax) {
        if(!current_user_can('administrator')) {
            wp_die(__('You are not allowed to access this part of the site'));
        }
    }
}