Como o $scope é um objeto você pode adicionar novas propriedades nele. Você pode criar um $scope.remover, $scope.adicionar, $scope.qualquerCoisa, etc. O professor criou o remover pra guardar nele uma função cuja responsabilidade é chamar o método que remove a foto no back e front-end. O $scope não se envolve em nada com o back-end, a gente só usa ele no front pra ligar o javascript com o html.
Quem deleta a foto no back-end é esse trecho de código:
$http.delete('/v1/fotos/' + foto._id)
Esse trecho faz uma requisição pro nosso back-end solicitando a remoção dessa foto e se a gente receber um status ok removemos ela do front:
.success(function() {
var indiceDaFoto = $scope.fotos.indexOf(foto);
$scope.fotos.splice(indiceDaFoto, 1);
$scope.mensagem = 'Foto ' + foto.titulo + ' removida com sucesso!';
})
A idéia do $scope é criar um jeito fácil de conectar nossa view(HTML) a nossa controller(javascript). O $scope é um objeto compartilhado pelas duas partes no angular 1. Portanto quando criamos um $scope.foto na nossa controller poderemos usar na nossa view esse $scope.foto apenas como "foto".