This solution will will work but could fail if the XML either does not contain the EndDate node or the EndDate node is not a valid Date (I have created it as a Unit Test) [This could be mitigated by some form of XSD validation of the XML where the EndDate is a Mandatory Date]
public void TestMethod1()
{
var todaysDate1 = new DateTime(2001, 10, 30);
var todaysDate2 = new DateTime(2016, 10, 28);
var todaysDate3 = new DateTime(2016, 10, 30);
var todaysDate4 = new DateTime(2016, 12, 25);
var xmlData ="<Info><Details><ID>user</ID><StartDate>23-10-2016</StartDate><EndDate>22-10-2016</EndDate></Details><Details><ID>user1</ID><StartDate>23-10-2016</StartDate><EndDate>29-10-2016</EndDate></Details><Details><ID>user2</ID><StartDate>23-10-2016</StartDate><EndDate>22-11-2016</EndDate></Details></Info>";
XDocument xdoc = XDocument.Parse(xmlData);
var nodes = xdoc.Descendants("Details");
nodes.Where(x => DateTime.Compare(DateTime.Parse(x.Element("EndDate").Value), todaysDate1) > 0).Remove();
Assert.AreEqual(0, xdoc.Descendants("Details").Count());
xdoc = XDocument.Parse(xmlData);
nodes = xdoc.Descendants("Details");
nodes.Where(x => DateTime.Compare(DateTime.Parse(x.Element("EndDate").Value), todaysDate2) > 0).Remove();
Assert.AreEqual(1, xdoc.Descendants("Details").Count());
xdoc = XDocument.Parse(xmlData);
nodes = xdoc.Descendants("Details");
nodes.Where(x => DateTime.Compare(DateTime.Parse(x.Element("EndDate").Value), todaysDate3) > 0).Remove();
Assert.AreEqual(2, xdoc.Descendants("Details").Count());
xdoc = XDocument.Parse(xmlData);
nodes = xdoc.Descendants("Details");
nodes.Where(x => DateTime.Compare(DateTime.Parse(x.Element("EndDate").Value), todaysDate4) > 0).Remove();
Assert.AreEqual(3, xdoc.Descendants("Details").Count());
}