I understand that you are Ok with 2 points segments simplification of original lines.
INPUT:

If you can get to this, using spatial join:

The script below will do the job:

Script assumes that layer called “lines3d” is empty PolylineZ layer:
import arcpy
## input parameters
mxd = arcpy.mapping.MapDocument("CURRENT")
lines2d = arcpy.mapping.ListLayers(mxd,"LINES")[0]
points = arcpy.mapping.ListLayers(mxd,"POINTS")[0]
lines3d = arcpy.mapping.ListLayers(mxd,"lines3D")[0]
d=arcpy.Describe(lines2d)
SR=d.spatialReference
curT=arcpy.da.InsertCursor(lines3d,"Shape@")
## get a list of lines
lineDict={}
with arcpy.da.SearchCursor(lines2d,("Shape@","LineId")) as cursor:
for shp, lineid in cursor:
lineDict[lineid]=shp
## shuffle through lines
for entry in lineDict:
line=lineDict[entry]
q='"LineId"=%s' %"'"+entry+"'"
listOfPoints=[]
with arcpy.da.SearchCursor(points,("Shape@","Z"),q) as cursor:
for pnt,z in cursor:
p=pnt.firstPoint
p.Z=z
listOfPoints.append([line.measureOnLine(p),p])
##create 2 points segments
modList=sorted(listOfPoints)
for i,row in enumerate(modList):
if i==0:p1=row[1];continue
p2=row[1]
pLine=arcpy.Polyline(arcpy.Array([p1,p2]),SR,True)
p1=p2
curT.insertRow((pLine,))
del curT
You can overcome a lot of license restrictions if you know Python