yes, you would. you can extend the default tag and filter set by writing your own and registering them on application startup. there's only one thing to keep in mind - filters were meant to be very easily extended, and so there you just have to implement one of two straight-forward interfaces (ISimpleFilter for no-parameter filters or IFilter for filters with 1 parameter). For tags, the concept is the same, but since NDjango itself is written in F#, the ITag interface is a bit more difficult to consume from C# or VB. It's certainly doable, but a bit messy. From F#, it's very straightforward.
in f# it looks like this:
/// A single tag implementation
and ITag =
/// Transforms a {% %} tag into a list of nodes and uncommited token list
member Perform: Lexer.BlockToken -> IParser ->
Lexer.Token seq -> (Node list * Lexer.Token seq)
in c#, it looks like this:
public Tuple<FSharpList<Interfaces.Node>, IEnumerable<Lexer.Token>>
Perform(Lexer.BlockToken __p1, Interfaces.IParser __p2,
IEnumerable<Lexer.Token> __p3)
again - filters are easy in c# - in fact, a majority of the filters that come with it are written in c#. tags are easy in f#, but a bit messier in c#
in terms of limitations, there aren't any known ones, not that i'm aware of.
full disclosure - i'm one of the ndjango authors.