creating a configurable permissions system in django
What about storing the new levels in a prefix tree? you could use each level as a node of a branch of the tree. 
When a new user wants do define a new level, the prefix tree will be updated starting from the level where the user belongs. If your problem is just about giving visibility to the user of the sub-branch of the level where he belongs, this should work.
A similar approach, maybe less intuitive, is to give to each level a number (or alpha-numeric value), so that in the end a user associated to the level "state" in your example, has a level code of 23 (let's say: "ex-country": 2 and "state": 3), so that he can add sub-levels starting with the prefix 23.
I am using django to create a web based app. This app will be used as a service by multiple clients. 
It has several models / tables that represent a hierarchical relationship. Users are given access based on this hierarchical relationship - ex County -> Schools -> Divisions -> Classrooms. 
So a user having access to a division has access to all classrooms within it etc
My question is how do I make this permissions system configurable across clients. The application should a new client to define arbitrary levels - ex country -> state -> city -> schools -> class. 
Any ideas on what are good approaches ?