Nim is really extensible. Features like async/await, `->` style anonymous functions, and string interpolation are defined in the stdlib, with little to no language level support. I have a lot of Ruby experience, a language know for its metaprogramming capabilities, and Nim is significantly more extensible.
Nim metaprogramming happens at compile time, which is very different from Ruby or Python. You can generate types based on the contents of a database, or the results of an http request, but once the program is built it isn't changing until you rebuild it. You can't introduce new types or functions at runtime (technically you could with the VM, but most people don't use Nim that way). Can it support any programming paradigm? Who knows. It really depends on what level of support you're looking for, and how much work you're willing to do. You could write a Nim macro that imports and compiles code written in a completely different language if you wanted to, but at that point you're basically writing a new compiler inside of a macro, which is going to be a lot more trouble than it's worth most of the time. If you give more details on what you're hoping to do you'll probably get more useful answers. Whatever it is, I'd say it's pretty likely that you could do it with Nim, but it could be a big undertaking. Or it could be a 5 line template that takes 2 minutes to write.
