Why do filters/actions require an argument count?

  1. Because of backwards compatibility.

    You can use the same callback for multiple filters. Inside of that callback you should use current_filter() to determine the context. But some plugins use the number of passed arguments instead. Changing that would break these plugins.

    That’s why you should always use the API (here: current_filter()) and not some made-up construct.

  2. Also, PHP will raise a warning when you pass more parameters to a native function than that function expects.

See Ticket #14671 Deprecate the “accepted args” argument in add_filter() and add_action()