Как обслуживать юзеров по очереди телебот?
global user_id
Ну как бы вот виновник. Глобальные переменные. Они общие на всего бота и на всех пользователей. Если тебе нужно дифференцировать пользователей - делай это сам.
Делай хранилище "ключ-значение", где ключ - ID пользователя, значение - хранимые для этого пользователя данные. При обработке сообщения читай ID пользователя, доставай из хранилища данные, и уже сообразно им обрабатывай сообщение.
Таким хранилищем может быть простой словарь (если не нужно сохранять состояние между перезапусками бота), БД или ещё что.

Не знаю, есть ли в telebot реализация Finite State Machine, но обычно для реализации сценариев используют её. Идея та же - для каждого юзера храним его текущее состояние (шаг в сценарии) и ассоциированные с ним данные.
Проблема в этой строке:
global user_id
Вам надо построить код так, чтобы не использовать global.