Every standard cell library used to start as a collection of
hand laid out cells. Although I have worked with some folks
who use compiler based meta-libraries and port the one
master to many foundry flows.
The real keys are uniform placement of the pins, and cells,
on a regular grid, and ensuring that cells are buttable in
all orientations (half-spacing clearance to boundary). A
particular placer / router will need dimension and pin
location info tabulated in useful form. The cells may need
routing-specific features (prBoundary, pins/texts, etc.)
that a custom cell may not require.
I've custom-drawn "standard" cells and then hand routed
tens of kGates random logic. I wouldn't recommend it, but
standardizing cell layouts does have benefits even to a
primitive physical design approach.