```python
import re

def expand_nth_weekday(ordinal: int, weekday: int, start: str, months: int) -> list:
    if ordinal not in {-1, 1, 2, 3, 4, 5} or weekday < 0 or weekday > 6:
        raise ValueError("Invalid ordinal or weekday")
    
    if not re.match(r'^\d{4}-\d{2}$', start):
        raise ValueError("Invalid start format")
    
    year, month = map(int, start.split('-'))
    if year < 1 or year > 9999 or month < 1 or month > 12:
        raise ValueError("Invalid start year or month")
    
    if months <= 0 or months > 240:
        raise ValueError("Invalid number of months")
    
    def is_leap_year(year: int) -> bool:
        return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
    
    def days_in_month(year: int, month: int) -> int:
        if month in {4, 6, 9, 11}:
            return 30
        elif month == 2:
            return 29 if is_leap_year(year) else 28
        else:
            return 31
    
    def find_nth_weekday(year: int, month: int, ordinal: int, weekday: int) -> str:
        days = [d for d in range(1, days_in_month(year, month) + 1)
                if (year, month, d).weekday() == weekday]
        return f"{year:04d}-{month:02d}-{days[ordinal - 1]:02d}" if ordinal <= len(days) else None
    
    result = []
    for _ in range(months):
        date = find_nth_weekday(year, month, ordinal, weekday)
        if date:
            result.append(date)
        year += (month == 12)
        month = (month % 12) + 1
        if year > 9999:
            raise ValueError("Span exceeds the allowed year limit")
    
    return result
```