Olá!
Eu comecei a estudar há um par de semanas somente, mas vou te dar a minha opinião.
A respeito da primeira dúvida, quando o interrows é usado em um laço for, permite transitar através de todo um dataframe fila a fila (de fato "row" em inglês significa fila). O detalhe é que enquanto ele faz isso ele vai te devolvendo um par de dados cada vez: o primeiro é o índice, que seria o identificador da fila, às vezes é um número (0, 1, 2, 3 (...) como no caso do dataset do exemplo, outras pode ser uma etiqueta tipo "Passat", "Crossfox", "DS5" (...), depende de como o dataframe foi estruturado. O segundo dado é o valor associado ao índice, que pode ser um valor único ou vários valores (tipo uma lista), no seu exemplo o segundo dado que ele devolve é o conjunto de valores que integra a linha toda, ou seja "Nome", "Motor", "Ano" (...).
Como ele vai devolver 2 valores em cada iteração do laço for precisamos especificar 2 variáveis depois do for, no seu exemplo as variáveis são index que vai receber 0, 1, 2, 3 (...) e row que vai receber os valores de "Nome", "Motor", "Ano" (...).
Desta maneira, a primeira linha: "for index, row in dataset.iterrows():" pode ser interpretada como a seguinte série de comandos: "Entra al dataframe dataset, confere ele fila a fila e coloca o par de valores devolvidos nas variáveis index e row".
A respeito da segunda dúvida, Pandas sabe que index é o índice porque foi declarado desta forma ao criar o laço for.
Por outro lado, o .loc além de permitir fazer seleções dentro de um dataframe utilizando como referência o índice passado como parâmetro, também dá a possibilidade de criação de uma nova coluna dentro de um dataframe. A terceira linha do exemplo: "dataset.loc[index, 'Km_media'] = row['Quilometragem'] / (2019 - row['Ano'])", pode ser interpretada como a seguinte série de comandos: "Localiza dentro de dataset o índice correspondente, cria uma nova coluna com nome Km_media, guarda dentro dela o resultado do cálculo matemático".
Espero ter sido de ajuda :)