I'm not sure exactly what you're asking, but you make an interesting observation that is not documented well. In plain English, the terms are the same. If I'm a page and my parent page is 'Father', I am also a child_of 'Father'. How the arguments are used in
get_pages() is vastly different.
The parent argument is limited to a single generation. The child_of argument spans many generations. The page 'Grandfather' is not my parent, but I am a child_of 'Grandfather'. This much is documented.
What's not documented is only the parent argument becomes part of the SQL query. If the number argument is 2, the query will return 2 pages who's parent field matches the argument.
The child_of argument is not part of the query. It is fed to
get_page_children() along with the query results within the
get_pages() function. Thus the child_of argument may return less than the number argument, depending what was returned from the query. I will add a note regarding this to the documentation.
However, if you provide both the parent and child_of arguments, and they are the same (which is the only proper way to use the parent argument according to documentation), the
get_page_children() portion will return all of the query results, since they all have the same parent and are thus all children of that parent. So I don't really see the need for the child_of argument at all when using the parent argument. I will not change the documentation on this aspect without further investigation though.