Q:

How can I add as child to a parent each group of stairs to it's correct parent?

In the first script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GenerateStairsUnits : MonoBehaviour
{
    [Header("Stairs Units Prefab")]
    public GameObject stairsUnitsPrefab;
    [Space(5)]
    [Header("Settings")]
    [Range(1, 20)]
    public int numberOfUnits = 1;
    public static GameObject Unit;

    private int oldNumberOfUnits = 0;

    // Use this for initialization
    void Start ()
    {
        oldNumberOfUnits = numberOfUnits;

        var unitsParent = GameObject.Find("Stairs Units");
        for (int i = 0; i < numberOfUnits; i++)
        {
            Unit = Instantiate(stairsUnitsPrefab, unitsParent.transform);
            Unit.name = "Stairs " + i.ToString();
        }
    }

    // Update is called once per frame
    void Update ()
    {

    }
}

So now under Stairs Units I have for example 5 Stairs (Stairs 0 , Stairs 1, Stairs 2, Stairs 3, Stairs 4) that are a copy of this script:
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;

public class GenerateStairs : MonoBehaviour
{
    [Header("Stairs Prefb")]
    public GameObject stairsPrefab;
    [Space(5)]
    [Header("Platforms")]
    public bool addPlatforms = false;
    public GameObject platformsPrefab;
    [Space(5)]
    [Header("Settings")]
    public float delay = 3;
    public int stairsNumber = 5;
    public Vector3 stairsStartPosition;
    public Vector3 stairSize;
    public Vector3 stairsSize;
    public float stepWidthFactor = 1f;

    private Vector3 stairsPosition;
    private GameObject stairsParent;

    // Use this for initialization
    void Start()
    {
        stairsParent = new GameObject();
        stairsParent.name = "Stairs";
        stairsParent.transform.parent = GenerateStairsUnits.Unit.transform;
        StartCoroutine(BuildStairs());
    }

    // Update is called once per frame
    void Update()
    {

    }

    private IEnumerator BuildStairs()
    {
        for (int i = 1; i <= stairsNumber; i++)
        {

            stairsPosition = new Vector3(
                    stairsStartPosition.x,
                    stairsStartPosition.y + (i * stairsSize.y),
                    stairsStartPosition.z + (i * stairsSize.y) * stepWidthFactor);

            GameObject stair = Instantiate(
                    stairsPrefab,
                    stairsPosition,
                    Quaternion.identity);

            stair.tag = "Stair";
            stair.transform.parent = stairsParent.transform;
            stair.transform.localScale = stairSize;

            yield return new WaitForSeconds(delay);
        }

        stairsParent.AddComponent<MoveObjects>().Init();
    }
}

Now on the second script the "Stairs" I want to be a child of each stairs unit:
For example under Stairs 0 should be Stairs. Then under Stairs 1 there should be also Stairs and also under Stairs 2 and Stairs 3 and Stairs 4.
But the way I tried to do it:
stairsParent.transform.parent = GenerateStairsUnits.Unit.transform;

Don't put each Stairs under Stairs 0,1,2,3,4

A:

So what I can see is your instantiating 5 Stairs each containing the class that instantiates more stairs. In other words Stairs# is the transform the other stairs need to transform to. Your setting the other stairs currently to Stairs Unit all you need to do is the Stair# transform without .parent. Also in start remove. A quick mock up Stairs Unit/Stair# <--- transform.parent would set the other stairs to Stairs Unit what I think you are after is Stairs Unit/Stairs#/more stairs, hope that helps with the small visual.
stairsParent.transform.parent = GenerateStairsUnits.Unit.transform;

then 
private IEnumerator BuildStairs()
{
    for (int i = 1; i <= stairsNumber; i++)
    {

        stairsPosition = new Vector3(
                stairsStartPosition.x,
                stairsStartPosition.y + (i * stairsSize.y),
                stairsStartPosition.z + (i * stairsSize.y) * stepWidthFactor);

        GameObject stair = Instantiate(
                stairsPrefab,
                stairsPosition,
                Quaternion.identity);

        stair.tag = "Stair";
        stair.SetParent(transform);//just use this transform I believe this would be Stairs#
        stair.transform.localScale = stairSize;

        yield return new WaitForSeconds(delay);
    }

    stairsParent.AddComponent<MoveObjects>().Init();
}

