```python
def pack_entries(entries: list) -> str:
    """
    Serialize a list of [key, value] pairs of strings into one line.
    Escape backslashes, equals signs, and semicolons inside keys or values.
    Raise ValueError for invalid inputs.
    """
    if not isinstance(entries, list):
        raise ValueError("Input must be a list.")
    
    def escape(s: str) -> str:
        return s.replace("\\", "\\\\").replace("=", "\\=").replace(";", "\\;")
    
    def validate_pair(pair: list) -> None:
        if not isinstance(pair, list) or len(pair) != 2:
            raise ValueError("Each entry must be a two-element list.")
        key, value = pair
        if not isinstance(key, str) or not isinstance(value, str):
            raise ValueError("Keys and values must be strings.")
        if not key:
            raise ValueError("Keys cannot be empty.")
        if key in seen_keys:
            raise ValueError("Duplicate keys found.")
        seen_keys.add(key)
    
    seen_keys = set()
    escaped_pairs = []
    
    for pair in entries:
        validate_pair(pair)
        key, value = pair
        escaped_key = escape(key)
        escaped_value = escape(value)
        escaped_pairs.append(f"{escaped_key}={escaped_value}")
    
    return ";".join(escaped_pairs)
```