If you look at AbstractVillager.getOffers() it will only regenerate the trades if the offers field is null.
It does this by calling updateTrades().
But if you look in that method it calls addOffersFromItemListing() with a maximum of 2.
So, it will only ever create 2 trades.
You could use an access transformer to make the Villager.updateTrades() method public.
https://forge.gemwire.uk/wiki/Access_Transformers
Then call it multiple times to fill all the levels for the villager?