Why can I not edit the Mesh name in field created with row.prop(obj, "data")
Think of Objects as containers, which can contain Curve data or Mesh data (and a few other kinds). 

obj.data will refer to the Mesh or the Curve of the object. You would need to do the following to display the mesh's name

row.prop(obj.data, "name")


Or replicating what the standard panels do (with or without the icon).

    obj = context.object

    col = layout.column()
    if obj.data:
        col.prop(obj.data, "name")
        col.prop(obj.data, "name", icon="OUTLINER_DATA_" + obj.type)
    else:
        col.label('An empty selected')