Hi,
I tried this in ArcGIS Pro 1.3 with Python 3.4.4 and it behaves well. The key thing is to delete the reference to the layer object when you are done with it ('del lr')!
So the right way to create and delete a layer is
in_fc, w =r'C:\temp\fc.shp', "FID < 3"
lr = arcpy.management.MakeFeatureLayer(in_fc, 'lr1', w).getOutput(0)
arcpy.management.Delete(lr)
del lr
Alternatively, wrapping the part of your where the layer is created, used, and then delted in a function *should* also resolve the issue because (as far as I know) the reference to the layer object *should* be garbage collected by Python when the function finishes.
The code below shows more details. It creates a layer, deletes the layer, then it creates and deltes the layer again. You would not do this in practice but it's important to be able to copletely delete layers in Python scripts (e.g. when using arcpy.management.SelectLayerByLocation in a loop). The bottom line is, use the 'del' statement.
import arcpy
in_fc=r'C:\temp\fc.shp'
w = "{0} < 3".format(arcpy.Describe(in_fc).OIDFieldName)
lrname = 'lr1'
# create a layer
lr = arcpy.management.MakeFeatureLayer(in_fc, lrname, w).getOutput(0)
print(arcpy.Exists(lr)) # True
print(arcpy.Exists(lrname)) # True
print(type(lr)) # <class 'arcpy._mp.Layer'>
# delete the layer
arcpy.management.Delete(lr)
print(arcpy.Exists(lr)) # True
print(arcpy.Exists(lrname)) # True
del lr
print(arcpy.Exists(lrname)) # False
#print(arcpy.Exists(lr)) # we deleted variable lr using 'del lr' so we can't refer to it
# create and delete the layer again
lr = arcpy.management.MakeFeatureLayer(in_fc, lrname, w).getOutput(0)
print(arcpy.Exists(lrname)) # True
print(arcpy.management.GetCount(lrname).getOutput(0)) # 3
arcpy.management.Delete(lr)
del lr
Filip.