I've certainly created something like this; it's a great use for definition queries. Here's a copy/paste/modification from a tool I've written. You'll have to look up how to create a script tool in a toolbox. When you do, make two parameters, one to hold the input shapefile/feature class (type = Feature Class or Layer), and one to enter the "layer by" field (type = String). Then, use this code in the script that's associated with the tool:
import arcpy
## get user input
datasource = arcpy.GetParameterAsText(0)
field = arcpy.GetParameterAsText(1)
## make the mxd and data frame objects
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
## make list of unique values in field
unique_values = set([row[0] for row in arcpy.da.SearchCursor(datasource,field)])
unique_values.sort()
## iterate through the values, and make layers for each one
fieldname = arcpy.AddFieldDelimiters(datasource, field)
for value in unique_values:
query = "{0} = '{1}'".format(fieldname,value)
layer = arcpy.mapping.Layer(datasource)
layer.name = value
layer.definitionQuery = query
arcpy.mapping.AddLayer(df, layer, "BOTTOM")
This is very bare-bones, and you could add a bunch of bells and whistles. First thing I'd do is go in the ToolValidator for the script tool itself and add these lines to the updateParameters function:
def updateParameters(self):
if self.params[0].value:
fieldnames = [f.name for f in arcpy.ListFields(self.params[0].value)]
self.params[1].filter.list = fieldnames
Now you'll have a dropdown in the tool dialog with the field names, so you won't have to carefully type the field name (because the script will not work with improper case!)
Regarding use cases: this is the skeleton of a tool I used to create multi-layered kml files... automate the creation of a bunch of layers like this, apply a standardized symbology to each layer, and use the map to KML tool on the map document to create the output. Wonderfully useful for sharing data with non-GIS users.