I don't understand if you're asking how to implement compose as a primitive on List, or if you're generally asking what opinion we have on defining compose as one of the building blocks for the other operations...
Apart from this, the different definitions are equivalent, in the sense that to be able to define the kleisli composition for the Functor F, there must be some underlying ability to define for F operations which are equivalent to unit + join, or unit + flatMap, because that underlying capability is what makes it possible for the corresponding Kleisli to be a category and therefore to have a compose function.
I know it may sounds a bit vague, but the corresponding math is what gives meaning to the Monad definition and the operations on that.
I hope it helps, otherwise feel free to elaborate more
Ivano