Where these arguments are defined?

You should look on ow WordPress Plugin Api works.

When you add a filter, the function that hook into that filter receive the argument from the function: apply_filters.

This function pass at least one argument, but can pass more, and always aspect a value returned.

So if you can write

add_filter( 'walker_nav_menu_start_el', 'description_in_nav_el', 10, 4 );

is because somewhere in the code there is a line that appear something like:

$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );

So the argument you can use, are passed to your function via apply_filters and they are generated in the function that contain that line.

when you want to know more on a hook, first play where to see, is Codex, however not all hooks can be founded there, in that case best place where look is code.

I think you use a software to write your code, and most probably that software have a search feature among all files in a folder1, so once you know what to search:

apply_filters( ‘walker_nav_menu_start_el’

try yourself, you’ll find the file /wp-includes/nav-menu-template.php at line 169 contain just the line I posted above, inside the method start_el of the class Walker_Nav_Menu.

1 If you are familiar and use any Unix SO, of course you’ll have easier life using grep, but in that case, you already know it…