Generally speaking a Service is a class where you implement related and common functionality that you want to be used in various places.
If you look into the Registrar class you mentioned, it has two methods: validator() and create().
The validator()method returns a Validator object that contains the rules for registering a new user. Note that this validation rules are specific for registering a user, you could have a different validation rule set for other operations, like letting a user to change his/her e-mail address.
The create() methods uses the User eloquent model to create a user with a minimum set of fields that are required to register. You could add more attributes to your User model, but for registering these ones will be sufficient.
If you think about it, both of these methods are very specific to a user registration process, so they should not belong to the User model, nor are candidates for a repository. This is when a service is helpful.
Another example: in a project of mine I have a Service which calculates the distance between two cities, using Google Distance Matrix API, I have something like this:
<?php namespace App\Services;
use GuzzleHttp\Client;
use App\City;
class DistanceService
{
const GOOGLE_API_URL = 'http://google/api/url/here';
public function calculate( City $from, City $to )
{
// 1. get cities api-comapatible name representation
// 2. replace on the API URL
// 3. make a request using Guzzle
// 4. fetch and parse the response
// 5. return the distance
}
/* private helper methods */
}
This is a very specific task, and has a somehow lengthy algorithm. This Service class encapsulates its logic, and can I use it in various places along my app.
I also adheres to the Single Responsibility Principle from the SOLID best-practices [ https://laracasts.com/tags/principles ].
tl;dr;
A Service class encapsulates functionality that should be shared along different parts of an application.
EDIT: for the second part of your question (Do I need to extend or implement any Laravel Core class to a service?), no you don't need. Declaring an interface and implementing it, is a best-practice. For example, if I want to change my Distance calculation service to use a different service than google's api, it would be better to declare an interface, and inject the interface on the methods I require this Service. The declare a Service Provider to tell Laravel's container which concrete implementation to use whenever an interface "instance" is required.
For more info about Service Providers see this laracast: [ https://laracasts.com/series/laravel-5-fundamentals/episodes/26 ].