```python
def trim_to(line: str, limit: int) -> str:
    if limit < 4:
        raise ValueError("Limit must be at least 4")
    
    if len(line) <= limit:
        return line
    
    words = line.split()
    trimmed_words = []
    current_length = 0
    
    for word in words:
        if current_length + len(word) + 3 > limit:
            break
        trimmed_words.append(word)
        current_length += len(word) + 1
    
    return ' '.join(trimmed_words) + '...'
```