While I'm leaving carlo's answer as the valid one, over 200 pieces, knife project is seriously slow on my laptop. That said, it seems to be the only way to do it within Blender, and it produces acceptable pieces with 64 vertices ( at 4 in the curves' ures) and it's easily scriptable.
For over 200 pieces, Inkscape seems to be more suitable, the method that I found (http://tuts.ahninniah.graphics/how-to-make-a-jigsaw-puzzle-with-gimp-and-inkscape/) works well with the extension I use to generate these curves in the first place (https://github.com/Neon22/inkscape-jigsaw)
The only drawbacks is that it adds more control points and you end up with around 110 verts per shape.
Method :
Generate the curves using the extension.
Make sure the svg curves are not grouped by pressing Shift+Ctrl+G
several times
Group all the curves but not the border : Select all Ctrl+A
, Shift+clic
on the border shape and combine Path > Combine (Ctrl+K)
Make sure that the grouped curves object is on top : Object > Raise to Top (Home)
Select the two objects Ctrl+A
and go to Path > Division (Ctrl+/)
You can then import it in blender
To answer the second part of my question ( correct naming of the shapes ) I made a python script that changes the name of the shape based on its position :
for obj in bpy.data.objects:
row = math.floor(obj.location.y/size)
col = math.floor(obj.location.x/size)
obj.name = "shape-{}-{}".format(row,col)
obj.data.name = obj.name
note :
I had also tried X_ALL https://github.com/zeffii/mesh_tiny_cad to connect the curves but it was way to slow and a bit unreliable. So I didn't pursue it further.
conclusion :
I still prefer carlo's way, and I will try to use it to generate the complex jigsaws on a powerful computer. But ideally I would like a script capable of merging/connecting intersecting edges on 100,000+ edges.