Why can't I enable the 'new' button of action?
The operator does not poll.

The issue arises since the operator bpy.ops.action.new does not poll in the toolbar header.

Similarly in python console

&gt;&gt;&gt; bpy.ops.action.new.poll()
False


Closer inspection of the action editor UI code, will see that the template object is the dope sheet space st = context.space_data not the animation data of the context object. My guess is the operator uses space to poll.

Code wise will confess to never using this operator; to add a new action would instead

action = bpy.data.actions.new(name)


and assign it to the animation data of the object I'm animating.

Enough waffle. Recommend here creating an operator bpy.ops.foo.bar  that makes the new action and assigns it where you wish, it appears from Q this is on the active object  Call the following from your operators execute method.

def main(context):
    ob = context.object
    name = f"{ob.name}Action"
    action = bpy.data.actions.new(name)
    # choose whether to set as active action or whatever
    ob.animation_data_create()
    ob.animation_data.action = action


Have it poll if there is a context object

Then use it instead for new

layout.template_ID(ob.animation_data, "action", new="foo.bar")


Side Note.

The draw method is only meant for drawing to the UI. If you put an __init__ in a panel class will see they are initialized constantly.  

Trying to alter objects in any way during a draw will result in an error.  This applies to 

bpy.context.object.animation_data_create()


in question code.