The NLSR code currently is a little spaghetti-y, with functions calling functions further down the line, which triggers more function call sequences, etc., such that one call can have far-reaching consequences to the state of the program. This makes NLSR hard to read and very hard to understand. A better alternative would be to use some kind of messaging/event system in which the modules are highly independent of each other and communicate using well-defined interfaces, such that the whole of NLSR can be treated as the sum of a series of black-box components.
This is a CI-NEW (NDN-CRI) grant goal, but the target year is unclear. Since this is a large goal, it can be assumed to be targeted for year three.