How can I add or remove the element in the sub-lists, whose length are different?

Here is one way. First I add a zero to the end of each subarray, then I can use Part ([[ ]]) to easily address and update those elements:

list1 = Map[Append[0], list1, {2}];
list1[[All, All, -1]] = list2;
list1

{{{1, 2, 3, 4, a1}, {11, 12, 13, 14, a1}, {22, 23, 24, 25, a1}}, {{-1, -2, -3, -4, a2}, {-11, -12, -13, -14, a2}, {-22, -23, -24, -25, a2}, {-41, -42, -43, -44, a2}}, {{100, 200, 300, 400, a3}, {-100, -200, -300, -400, a3}}}

list1[[All, All, {1, -1}]]

{{{1, a1}, {11, a1}, {22, a1}}, {{-1, a2}, {-11, a2}, {-22, a2}, {-41, a2}}, {{100, a3}, {-100, a3}}}

list1[[All, All, {2, 3}]]

{{{2, 3}, {12, 13}, {23, 24}}, {{-2, -3}, {-12, -13}, {-23, -24}, {-42, -43}}, {{200, 300}, {-200, -300}}}

As you can see, extracting elements is pretty easy. The first step is the hard part. Here is another, more idiomatic, solution to that problem:

MapThread[Append[#2] /@ # &, {list1, list2}]

It may help to think about this problem in two steps. First we need to associate each element in list2 with each element in list1. Then we need to insert the associated elements from list2 into the lists from list1 that they are associated with. The first of these two parts can be done using Transpose, and then we can write a function to do the second part:

f[{l_, x_}] := Append[x] /@ l
f /@ Transpose[{list1, list2}]

This solution is not serious by any means but it represents another approach to the problem in case you're interested:

TakeList[
 MapThread[
  Append, {
   Flatten[list1, 1],
   Catenate@MapThread[ConstantArray, {list2, Length /@ list1}]
   }],
 Length /@ list1
 ]

newlist = MapThread[Thread[Join[#1, {#2}]] &, {list1, list2}]

{{{1, 11, 22, a1}, {2, 12, 23, a1}, {3, 13, 24, a1}, {4, 14, 25, a1}}, {{-1, -11, -22, -41, a2}, {-2, -12, -23, -42, a2}, {-3, -13, -24, -43, a2}, {-4, -14, -25, -44, a2}}, {{100, -100, a3}, {200, -200, a3}, {300, -300, a3}, {400, -400, a3}}}

ext1 = MapThread[Thread[{First /@ #1, #2}] &, {list1, list2}]

{{{1, a1}, {11, a1}, {22, a1}}, {{-1, a2}, {-11, a2}, {-22, a2}, {-41, a2}}, {{100, a3}, {-100, a3}}}

ext2 = Map[#[[2 ;; 3]] &, list1, {2}]

{{{2, 3}, {12, 13}, {23, 24}}, {{-2, -3}, {-12, -13}, {-23, -24}, {-42, -43}}, {{200, 300}, {-200, -300}}}


ClearAll[f0]
f0 = Inner[#2 /@ # &, #, Append /@ #2, {##} &] &;;

f0[list1, list2]
{{{1, 2, 3, 4, a1}, {11, 12, 13, 14, a1}, {22, 23, 24, 25, a1}},
 {{-1, -2, -3, -4, a2}, {-11, -12, -13, -14,  a2}, {-22, -23, -24, -25, a2},
  {-41, -42, -43, -44, a2}}, 
 {{100, 200, 300, 400, a3}, {-100, -200, -300, -400, a3}}}
% == newlist
True