Мужик. Это не магия - это обычный javascript. То что ты кладёшь в Provider value - то ты и забираешь в useContext.
Кладёшь массив - забираешь массив, кладёшь объект - забираешь объект. Два раза забрав одно и то же - ты два раза получишь одно и то же.
Если же ты кладёшь вот так - value={(value1,value2,value3,value4)}>, то на выходе у тебя будет value4, потому что у тебя тут не объект и не массив, а использование
оператора запятая в скобочках.
Чем тебе не нравится работа с массивом из четырёх значений и почему тебе прям
необходимо творить дичь - непонятно.
Возможно таки подойдёт использование объекта?
value={ {value1,value2,value3,value4} }>
const context = useContext(taskListContext);
context.value1
context.value2
context.value3
context.value4
P.S. Если очень хочется - поведение с отдачей сначала двух первых значений потом двух вторых можно сделать с помощью кастомного хука. Но не нужно.