Input:
Catchments table:
WORKFLOW TO DERIVE LONGEST FLOW PATHS:
arcpy.PolygonToRaster_conversion(in_features="subcatchments", value_field="ID", out_rasterdataset="D:/Scratch/CATCHM")
arcpy.gp.FocalStatistics_sa("CATCHM", "D:/Scratch/RANGE", "Rectangle 3 3 CELL", "RANGE", "DATA")
arcpy.gp.RasterCalculator_sa("""Con("RANGE" == 0,"CATCHM")""", "D:/Scratch/ISLANDS")
arcpy.gp.RasterCalculator_sa("""Con( ~IsNull("ISLANDS"),"dem")""", "D:/Scratch/FENCED")
arcpy.gp.Fill_sa("FENCED", "D:/Scratch/FILLED", "")
arcpy.gp.FlowDirection_sa("FILLED", "D:/Scratch/FDIR", "NORMAL", "")
arcpy.gp.FlowLength_sa("FDIR", "D:/Scratch/FLEN", "DOWNSTREAM", "")
arcpy.gp.ZonalStatistics_sa("ISLANDS", "VALUE", "FLEN", "D:/Scratch/LENMAX", "MAXIMUM", "DATA")
arcpy.gp.RasterCalculator_sa("""Con("LENMAX" == "FLEN","ISLANDS")""", "D:/Scratch/MAXPNTS")
arcpy.DeleteIdentical_management(in_dataset="SOURCES", fields="GRID_CODE", xy_tolerance="", z_tolerance="0")
arcpy.gp.CostPath_sa("SOURCES", "FDIR", "FDIR", "D:/Scratch/CPATHS", "EACH_CELL", "GRID_CODE")
arcpy.gp.StreamToFeature_sa("CPATHS", "FDIR", "D:/Scratch/LongFPs.shp", "SIMPLIFY")
SPLIT CATCHMENTS (DEM cell size = 1*1):
arcpy.FeatureToLine_management(in_features="subcatchments", out_feature_class="D:/Scratch/ARCS.shp")
arcpy.Merge_management(inputs="ARCS;LongFPs", output="D:/Scratch/MERGED.shp", field_mappings="""ID "ID" true true false 10 Long 0 10 ,First,#,ARCS,ID,-1,-1""")
arcpy.ExtendLine_edit(in_features="MERGED", length="15 Meters", extend_to="EXTENSION")
arcpy.FeatureToPolygon_management(in_features="MERGED", out_feature_class="D:/Scratch/splits.shp", cluster_tolerance="", attributes="ATTRIBUTES", label_features="")
arcpy.SpatialJoin_analysis(target_features="splits", join_features="subcatchments", out_feature_class="D:/Scratch/FINAL.shp", join_operation="JOIN_ONE_TO_ONE", join_type="KEEP_ALL", field_mapping="""Id "Id" true true false 6 Long 0 6 ,First,#,splits,Id,-1,-1;ID_1 "ID_1" true true false 10 Long 0 10 ,First,#,subcatchments,ID,-1,-1""", match_option="WITHIN", search_radius="", distance_field_name="")
OUTPUT LABELLED BY COUNT OF PARTS:
As one can see some manual editing of MERGED lines (no split happened to catchment 4) or FINAL (too many splits of catchment 10) will be needed