According to documentation find_element() seem to be kind of "private" method that is used by find_element_by_...() methods and also might be used in Page Object
So using Page Object pattern is the reason why you might need find_element() + By instead of find_element_by_...().
For example, you have some variable that contains elements' id value
link_id = "some_id"
and you use it to locate element as
my_link = driver.find_element_by_id(link_id)
If for some reason id attribute was removed from element, you need both to update selector and replace find_element_by_...() method in my_link as
link_class_name = "some_class_name"
my_link = driver.find_element_by_class_name(link_class_name)
If you use By, then your initial locator might be
link_locator = (By.ID, "some_id")
and you locate your element as
my_link = find_element(*link_locator)
In case of changes in HTML source you need just to update your link_locator as
link_locator = (By.CLASS_NAME, "some_class_name")
and my_link remains exactly the same