```python
def trim_to(line: str, limit: int) -> str:
    """
    Cut a line down to at most a given number of characters.
    A line that had to be cut ends in three dots, and those dots count toward the limit.
    A line already short enough is left alone.
    Reject a limit under four with an error.

    :param line: The input line to be trimmed.
    :param limit: The maximum number of characters to keep in the line.
    :return: The trimmed line.
    """
    if limit < 4:
        raise ValueError("Limit must be at least 4 characters.")
    
    if len(line) <= limit:
        return line
    
    words = line.split()
    words_to_keep = words[:limit // 2]
    
    if len(words) > limit // 2:
        words_to_keep.append("...")
    
    return " ".join(words_to_keep)
```