In terms of "proper" high level SDL2; I'd probably want to do something like re-implement the rust SDL2 wrapper. What I mainly like about that is not that it's Rust, but that it's entirely safe by default.
Probably wouldn't go as far as making a Result[T] type and returning that; Idiomatic general Nim I think is more about taking advantage of the GC, as well as throwing exceptions. Someone else can wrap things in Result[T] if they like that.