Software Serial Research and Questions

GolamMostafa:
From the loop() function, we never execute the serialEvent() function by calling its name -- serialEvent(); but, we declare the same as void serialEvent(){} and not as ISR seralEvent(){}.

You are correct on both counts. serialEvent() is defined as void and not ISR and serialEvent() is not called from loop(). BUT serialEventRun() is called from loop() and serialEventRun() does call serialEvent() as programmed in HardwareSerial.cpp:

void serialEventRun(void)
{
#if defined(HAVE_HWSERIAL0)
  if (Serial0_available && serialEvent && Serial0_available()) serialEvent();
#endif
#if defined(HAVE_HWSERIAL1)
  if (Serial1_available && serialEvent1 && Serial1_available()) serialEvent1();
#endif
#if defined(HAVE_HWSERIAL2)
  if (Serial2_available && serialEvent2 && Serial2_available()) serialEvent2();
#endif
#if defined(HAVE_HWSERIAL3)
  if (Serial3_available && serialEvent3 && Serial3_available()) serialEvent3();
#endif
}

GolamMostafa:
This is the hypothesis to begin.

It isn't a hypothesis, but if you like to follow the scientific method then let's.
Step 1: Pose a question: Is serialEvent() a subroutine or ISR
Step 2: Perform Research. Research how the Arduino IDE compiles the program and the programming:
In Main.cpp we find:

int main(void)
{
	init();
	initVariant();
#if defined(USBCON)
	USBDevice.attach();
#endif
	
	setup();   
	for (;;) {
		loop();
		if (serialEventRun) serialEventRun();
	}
	return 0;
}

In HardwareSerial.cpp we find:

void serialEventRun(void)
{
#if defined(HAVE_HWSERIAL0)
  if (Serial0_available && serialEvent && Serial0_available()) serialEvent();
#endif
#if defined(HAVE_HWSERIAL1)
  if (Serial1_available && serialEvent1 && Serial1_available()) serialEvent1();
#endif
#if defined(HAVE_HWSERIAL2)
  if (Serial2_available && serialEvent2 && Serial2_available()) serialEvent2();
#endif
#if defined(HAVE_HWSERIAL3)
  if (Serial3_available && serialEvent3 && Serial3_available()) serialEvent3();
#endif
}

Step 3: Form a hypothesis: serialEvent() is a subroutine
Step 4: Perform an experiment: Create a program that can be interrupted by an ISR, stays in loop(), and indicates if/when serialEvent() is called do to the presence of serial data being received.
Test #1:

void setup() 
{
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
}

void loop() 
{
  for (int i=0; i<5; i+=0 )
  {
   ;
  }
}

void serialEvent()
{
  digitalWrite(13, HIGH);
  byte x = Serial.read();
  Serial.write(x);
}

Also perform a negative test, allowing loop() to end (same program, change i+=0 to i++)

Step 5: Is procedure working, are results being obtained. Yes
Step 6: Analyze data and draw conclusions. LED never lights for test #1, it does light for test #2. Therefore serialEvent() routine can execute and light the indicator, since it does not light for test #1 loop() is never interrupted and serialEvent() does not execute upon receipt of serial data. Test #2 shows that when serialEvent() is allowed to execute the indicator lights upon receipt of data. Conclusion is that serialEvent() is a subroutine.
Step 7: Do results align with hypothesis. Yes.
Step 8: Communicate results. serialEvent() is a subroutine.