Welp, I went through all that work to implement the backtracking Newton solver, and it actually performs worse than the naive one for the tests I've written. I think I've implemented it correctly, but bugs in numerical algorithms can be stupidly hard to track down. It's probably best at this point to just go ahead with the simple solver, unless I have some problem with it. It may well be fine: it seems to do quite well on under-determined problems, which is pretty much my bread-and-butter.