Вы не можете запретить пользователю обходить что-либо в python. Всегда есть способ monkeypatch / отражать / проверять атрибуты; Там нет поддержки песочницы объекта.
В вашем примере:
>>> foobar._vel = -1
Обходит свойство полностью и присваивается непосредственно реальному атрибуту. Вы не можете предотвратить это вообще. Есть способы сделать это сложнее, но пользователь может назначить, если он действительно хочет, так какой смысл?
Обычный подход, похоже, заключается в том, чтобы полагаться на тот факт, что пользователи вашей библиотеки взрослые и доверяют им:
Объявите диапазон ожидаемых значений в документации и попросите пользователей следовать. Если они этого не делают, это их вина.