Maybe this example will help FreeFem-tutorial - Section 8 - example2.edp? ChangeNumbering is just to go from PETSc to FreeFEM numbering back and forth. Both numbering start from 0, one is global while the other is local, that’s the only difference.
No, u[] is in FreeFEM numbering (with overlap/duplicated unknowns) and the resulting vector is in PETSc numbering (without overlap/duplicated unknowns).
In fact, the u[] of the solution is the value on the grid node, and its number is determined, equal to u[] .ndof, which does not produce repeated unknowns?