"Custom" validation for plugin settings page
It sounds like you're on the right track. You could create a custom validator, as detailed here.

&lt;?php namespace Craft;

use Carbon\Carbon;

class MyPlugin_ExampleModel extends BaseModel
{
    protected function defineAttributes()
    {
        return [
            'startDate' =&gt; [
                'type'     =&gt; AttributeType::DateTime,
                'required' =&gt; true,
                'compare'  =&gt; '&lt;= endDate',
            ],
            'endDate' =&gt; [
                'type'     =&gt; AttributeType::DateTime,
                'required' =&gt; true,
                'compare'  =&gt; '&gt;= startDate',
            ],
        ];
    }

    public function rules()
    {
        $rules = parent::rules();

        $rules[] = ['startDate', 'validateFutureDate'];
        $rules[] = ['endDate', 'validateFutureDate'];

        return $rules;
    }

    public function validateFutureDate($attribute)
    {
        $value = $this-&gt;$attribute;

        if ($value &amp;&amp; Carbon::now()-&gt;gte($value)) {
            $message = Craft::t("Date must be in the future");
            $this-&gt;addError($attribute, $message);
        }
    }
}


You can also extract the validation into a separate class, which would make it easier to test (details are in the aforementioned article).

Caveats and disclaimers

This code is completely untested. In particular, I'm not sure whether the date comparison will work with the attribute value as-is. You'll probably also want to check what happens to the custom validation if the value contains an invalid date-time string.