Code is taken from here, and translated to Lazarus.

Dialing:

uses ras

...
var
  rasDialParam:RASDIALPARAMS;

  pRasConn:HRASCONN;

  dwResult: DWORD;

begin
  pRasConn := null;

  FillChar(rasDialParam, SizeOf(RASDIALPARAMS), 0);
  rasDialParam.dwSize:=SizeOf(RASDIALPARAMS);
  rasDialParam.szCallbackNumber[0]:=#0;
  rasDialParam.szDomain[0]:=#0;
  rasDialParam.szEntryName:='ConnName'; //important, name of the connection which I want to use
  rasDialParam.szPassword:='pass'; //important, if pass or user is wrong, then I will receive error code 619
  rasDialParam.szPhoneNumber[0]:=#0; 
  rasDialParam.szUserName:='user'; //important

  dwResult := RasDial(nil, nil, @rasDialParam, null, nil, @pRasConn);
  if dwResult = ERROR_SUCCESS then
    ShowMesage('It is working')
  else
    ShowMesage('Error: ' + IntToStr(dwResult))

Get connection status:

...
var
  dwResult: DWORD;
  MyRasconnstatus: RASCONNSTATUS;
...
 dwResult := RasGetConnectStatus(VRasConn, @MyRasconnstatus);
 if dwResult = ERROR_SUCCESS then 
 begin
   if MyRasconnstatus.rasconnstate = RASCS_Connected then 
   begin
     ShowMessage('Connected')
   end 
   else 
   begin
     ShowMessage('Not connected')
   end;
 end;

Hang up:

 RasHangUp(VRasConn)

List of error codes you can find here, or here.