```python
from typing import List

def trace_parcel(events: List[str]) -> List[str]:
    if not isinstance(events, list):
        raise ValueError("Input must be a list")
    
    states = ["created"]
    for event in events:
        if event not in ["created", "packed", "shipped", "delivered", "returned"]:
            raise ValueError(f"Invalid event: {event}")
        
        if event == "created":
            states.append("packed")
        elif event == "packed":
            states.append("shipped")
        elif event == "shipped":
            states.append("delivered")
        elif event == "delivered":
            states.append("returned")
        elif event == "returned":
            raise ValueError("Final state reached")
    
    return states
```