wrong number or types of arguments in call to X?
This:

DECLARE 

    TYPE studId_scholarshipModification IS RECORD(studentID studenti.id%TYPE,
      modificationPercentage NUMBER);
    TYPE modificationsRecordVarray IS VARRAY(2) OF studId_scholarshipModification;

    modifications modificationsRecordVarray:=modificationsRecordVarray();

BEGIN

    modifications.extend;
    modifications(1).studentID:=500;
    modifications(1).modificationPercentage:=0.4;
    modifications.extend;
    modifications(2).studentID:=501;
    modifications(2).modificationPercentage:=0.8;

    collegeManagement.modifiyScholarships(modifications);

END;


Should be this:

DECLARE 

    modifications collegeManagement.modificationsRecordVarray := 
      collegeManagement.modificationsRecordVarray();
    -- no type definition, using the type from the package

BEGIN

    modifications.extend;
    modifications(1).studentID:=500;
    modifications(1).modificationPercentage:=0.4;
    modifications.extend;
    modifications(2).studentID:=501;
    modifications(2).modificationPercentage:=0.8;

    collegeManagement.modifiyScholarships(modifications);

END;


Defining a type with the same name and properties is not the same as using the actual type defined in the package.

You can test it with:

create or replace package pkg1 is
type t_m is varray(2) of number;
procedure p1 (p_m in t_m);
end;
/

create or replace package body pkg1 is
procedure p1(p_m in t_m) as
begin
  null;
end;
end;
/

declare
  type t_m is varray(2) of number;
  m t_m := t_m();
begin
  pkg1.p1(m);
end;
/

declare
  m pkg1.t_m := pkg1.t_m();
begin
  pkg1.p1(m);
end;
/


The first call fails, the second call succeeds.