>  I get the following variations; all should check \@ifdefinable without
> \@ifundefined, but differ in the other respects:
>     define
>     new         If undefined, then define, else error.
>     renew       If defined, then define, else error.
>     provide     If undefined, then define, else do nothing.
>     override    If define, then define, else do nothing.

I don't have an opinion on cleaning up the internals of \@ifdefinable;
I have been able to write a large number of defining commands without
running into any problems in this regard (the moredefs package).  But
I would add the following to your list.  The first is already in the
kernel, the second is in moredefs:

    check         Compare given with existing definition;
                  warn if not identical.
    require       If undefined, define, else check.

When considering new defining commands, there are also (at least) four
Boolean variations:
        1) "robust" or not "robust"
        2) \long or not \long
        3) \global or not \global
        4) advanced syntax that lets you compute the macro name and/or write a
           complex parameter specification.

I've organized and normalized some new defining commands to a small
extent in moredefs, but certainly not with the completeness and
efficiency that might be achieved by starting from scratch.