Это вообще правильно?
Да, это правильно и это по сути единственный адекватный способ отмены долгоиграющих операций.
Когда-то давно у потоков был метод Abort, но его удалили, тк его использование очень часто приводило к неприятным багам.
Ну и пихать проверку cancellation token повсюду не обязательно.
Поток вызывает 1 функцию библиотечную неуправляемого кода, как ее прервать?
Безопасно - никак, если эта неуправляемая функция не предоставляет интерфейс для отмены.
Даже если бы и был способ (тот же Abort), то прерывание неуправляемого кода очень вероятно приведёт к утечке ресурсов (в лучшем случае не будет освобождена динамическая память)