This was kept separate because the API was "use this block to create a new action, return the action"; it separates the behaviour of callers from the implementation of creating that action.  You could, for example, replace the current model of abusing an object instance and adding methods with something that creates an actual Ruby class or module and maintain this public API.