Using object.convert function after creating object
Ok, so i found the answer:
Since bpy.ops.object.convert() needs a context the only way i managed it to work is:
obj.select_set(True)
bpy.context.view_layer.objects.active = obj
bpy.ops.object.convert(target='CURVE')

Though, it's quite weird that i have to 'manually' select an object to be able to use it, why not just obj.convert()? I'm not sure if method i used is the only one possible but i tried A LOT of stuff.
If there is a better, more elegant and robust method, please let me know!
Blender API changes so fast that it took me couple of hours to find the answer, even Blender 2.81 Docs were saying

bpy.context.object = obj will raise an error.
But
bpy.context.scene.objects.active = obj will work as expected.

While bpy.context.scene.objects.active is already deprecated!